1 #include <stdio.h>
2 #include <string.h>
3
4 #define N 10
5
6 typedef struct {
7 long id; // 准考证号
8 char name[20]; // 姓名
9 float objective; // 客观题得分
10 float subjective; // 操作题得分
11 float sum; // 总分
12 char result[10]; // 考试结果
13 } STU;
14
15 // 函数声明
16 void read(STU st[], int n);
17 void write(STU st[], int n);
18 void output(STU st[], int n);
19 int process(STU st[], int n, STU st_pass[]);
20
21 int main() {
22 STU stu[N], stu_pass[N];
23 int cnt;
24 double pass_rate;
25
26 printf("从文件读入%d个考生信息: 已完成\n", N);
27 read(stu, N);
28
29 printf("\n对考生成绩进行统计: 已完成\n");
30 cnt = process(stu, N, stu_pass);
31
32 printf("\n所有考生完整信息:\n");
33 output(stu, N);
34
35 printf("\n通过考试的名单写入文件: 已完成!\n");
36 write(stu_pass, cnt);
37
38 pass_rate = 1.0 * cnt / N;
39 printf("\n本次等级考试通过率: %.2f%%\n", pass_rate*100);
40
41 return 0;
42 }
43
44 // 把所有考生完整信息输出到屏幕上
45 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
46 void output(STU st[], int n) {
47 int i;
48
49 printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
50 for (i = 0; i < n; i++)
51 printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", st[i].id, st[i].name, st[i].objective, st[i].subjective, st[i].sum, st[i].result);
52 }
53
54 // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
55 void read(STU st[], int n) {
56 int i;
57 FILE *fin;
58
59 fin = fopen("C:\\Users\\Administrator\\Desktop\\实验7数据文件及部分代码_gbk\\examinee.txt", "r");
60 if (!fin) {
61 printf("fail to open file\n");
62 return;
63 }
64
65 for (i = 0; i < n; i++)
66 fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective, &st[i].subjective);
67
68 fclose(fin);
69 }
70
71 // 对考生信息进行处理:计算每位考生考试总分、结果;统计并返回通过考试的人数
72 int process(STU st[], int n, STU st_pass[]) {
73 int i,num=0;
74 for(i=0;i<n;i++){
75 st[i].sum=st[i].objective+st[i].subjective;
76 if(st[i].sum>60){
77 strcpy(st[i].result,"通过");
78 st_pass[num++]=st[i];
79 }
80 else
81 strcpy(st[i].result,"不通过");
82 }
83 return num;
84 }
85
86 // 把通过考试的考生完整信息写入文件list_pass.txt
87 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
88 void write(STU st[], int n) {
89 int i;
90 FILE *fout;
91
92 fout=fopen("C:\\Users\\Administrator\\Desktop\\实验7数据文件及部分代码_gbk\\list_pass.txt","w");
93 if (!fout) {
94 printf("无法创建文件 list_pass.txt\n");
95 return;
96 }
97 fprintf(fout,"准考证号\t姓名\t客观题\t操作题\t总分\t考试结果\n");
98 for(i=0;i<n;i++){
99 fprintf(fout,"%ld\t%s\t%.2f\t%.2f\t%.2f\t%s\n",
100 st[i].id,st[i].name,
101 st[i].objective,
102 st[i].subjective,
103 st[i].sum,st[i].result);
104 }
105 fclose(fout);
106 }