#include #include #include //int access(const char *, int); // 获取文件的权限 #include // system() #include #define MAX 200 //定义MAX表示可录入最大学生数 struct student //student结构体名 (成员结构类型)定义了学生的基本信息 { char no[10]; //成员变量 成员名 学号 char name[50]; //姓名 float score; //成绩 }; struct data //主结构类型 { int count; //学生个数 struct student stu[MAX]; //结构类型的嵌套 }dd; //dd是结构体data类型的变量 全局结构体变量名 void menu(); void to_menu(); void add_data(); void edit_data(); void fen_shu_duan(); void query_data_name(); void query_data_no(); void sort_data_score(); void read_data(); void view_data(); void save_data(); void menu() { system("cls"); /*清屏*/ printf("\n\n\n\n\n"); printf("\t\t|-----------------------学生C语言成绩记录簿----------------------|\n"); printf("\t\t|\t 0. 退出 |\n"); printf("\t\t|\t 1. 查看所有学生成绩 |\n"); printf("\t\t|\t 2. 输入学生成绩 |\n"); printf("\t\t|\t 3. 修改学生成绩 |\n"); printf("\t\t|\t 4. 查询成绩(学号) |\n"); printf("\t\t|\t 5. 查询成绩(姓名) |\n"); printf("\t\t|\t 6. 及格率 |\n"); printf("\t\t|\t 7. 成绩分数段 |\n"); printf("\t\t|----------------------------------------------------------------|\n"); printf("\t\t "); } //回到主菜单 void to_menu() { char c1,c2; printf("\n\n按回车返回主菜单…"); scanf("%c%c",&c1,&c2); //第一个字符确认上次的确认回车键 menu(); } /* 对应的颜色码表: 0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 浅绿色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色 */ int main(void) { system("color E9"); int fun; read_data(); menu(); while(1) { printf("\t\t 请输入功能号:",&fun); scanf("%d",&fun); switch(fun) { case 0: break; case 1: view_data(); break; case 2: add_data(); break; case 3: edit_data(); break; case 4: query_data_no(); break; case 5: query_data_name(); break; case 6: sort_data_score(); break; case 7: fen_shu_duan(); break; } if(fun==0)break; to_menu(); } } void view_data() // 查询总表 { int i; printf("学号\t 姓名\t C语言成绩"); printf("\n--------------------------------------------------------------------------\n"); for(i=0;i=60&&dd.stu[i].score<=100) a[0]++; else if(dd.stu[i].score<60) a[1]++; } j=a[0]; k=a[1]; pass=j/((j+k)*1.0)*100; printf("及格率:%.2f%%",pass); } void add_data() //添加学生成绩 { struct student st; // 创建结构体变量st int b; int k; while(1) { printf("\n请输入学生信息:"); printf("\n学号 \t姓名 \tC语言成绩"); printf("\n-------------------------------------------------------------------------------\n"); scanf("%s%s%f",st.no,st.name,&st.score); k=dd.count; strcpy(dd.stu[k].no,st.no); strcpy(dd.stu[k].name,st.name); dd.stu[k].score=st.score; dd.count++; printf("\n\n是否继续添加学生信息[1-Yes 0-No]:"); scanf("%d",&b); if(b==0)break; } save_data(); } void read_data() //将数据从文件读到结构体数组中 { FILE *fp; int i,k; struct student st; k=0; if((fp=fopen("d:/chen.txt","r"))==NULL) // 如果文件不存在 { dd.count=0; } else { fread(&k,sizeof(int),1,fp); dd.count=k; for(i=0;i=60&&dd.stu[i].score<=69) a[1]++; else if(dd.stu[i].score>=70&&dd.stu[i].score<=79) a[2]++; else if(dd.stu[i].score>=80&&dd.stu[i].score<=89) a[3]++; else a[4]++; } printf("\t\t60分以下:%d\n",a[0]); printf("\t\t60~69分:%d\n",a[1]); printf("\t\t70~79分:%d\n",a[2]); printf("\t\t80~89分:%d\n",a[3]); printf("\t\t90分以下:%d\n",a[4]); }