学生成绩管理系统(C语言实现)
2017-09-11 15:16
811 查看
//学生成绩管理系统(C语言实现)
#include<stdio.h> #include<stdlib.h> #include<string.h>//C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等 #include<conio.h>//用getchar()、getch()就要包含<conio.h> #include<dos.h> #define LEN sizeof(struct student) #define FORMAT "%d%10s%16d%13d%15d%19.2f\n" #define DATA stu[i].num,stu[i].name,stu[i].gaos_score,stu[i].cyy_socre,stu[i].English_score,stu[i].sum struct student//定义结构体 { int num;//学号 char name[20];//姓名 int gaos_score;//高数成绩 由于在vc++里不能对浮点型进行初始化,故定义为int型而不是定义成float,double等 int cyy_socre;//C语言成绩 int English_score;//大英成绩 float sum;//总成绩 }stu[100];//由于不知道输入多少名学生信息,故直接定义足够大的数组长度 int main() { //对各函数模板进行声明 void show();//显示信息 void input();//输入信息 void search();//查询信息 void del();//删除信息 void modify();//修改信息 void insert();//插入信息 void order();//排序 void number();//统计学生人数 void menu();//菜单 void bben();//版本信息 int n; bben(); menu(); scanf("%d",&n);//输入选择功能的编号 while(n) { switch(n) { case 1: input();break; case 2: search();break; case 3: del();break; case 4: modify();break; case 5: insert();break; case 6: order();break; case 7: number();break; case 8: show();printf("请按任意键返回菜单!\n");break; default:break; } getch(); menu();//执行完功能再次显示菜单界面 scanf("%d",&n);//输入选择功能的编号 } return 0; } void bben() { int i,j; system("cls"); printf("\n\n\n\n\n"); printf(" * * \n"); printf(" *** *** \n"); printf(" ***** ***** \n"); printf(" ***************欢迎进入学生成绩管理系统***************\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** 版本1.2 **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** 16网络工程x **\n"); printf(" ** **\n"); printf(" ** **\n"); printf(" ** 某某某 **\n"); printf(" ** **\n"); printf(" ******************************************************\n"); printf("\n\n\n\n\n\n\n"); system("pause");//画面停止 } void menu() { system("cls");//清屏 printf("\n\n\n\n\n ********************菜单********************\n"); printf(" * *\n"); printf(" * 0.退出 *\n"); printf(" * 1.输入信息 *\n"); printf(" * 2.查询信息 *\n"); printf(" * 3.删除信息 *\n"); printf(" * 4.修改信息 *\n"); printf(" * 5.插入信息 *\n"); printf(" * 6.排序输出 *\n"); printf(" * 7.学生人数 *\n"); printf(" * 8.显示信息 *\n"); printf(" * *\n"); printf(" ********************************************\n"); printf(" 请输入您要执行的序号(0--8):"); } void show() { FILE *fp; int i,a=0; fp=fopen("data.txt","rb");//打开文件 while(!feof(fp))//判断文件指针*fp是否指向文件末尾 { if(fread(&stu[a] ,LEN,1,fp)==1) a++; } fclose(fp); printf("学号 姓名 高数 C语言 大学英语 总分\t\n"); for(i=0;i<a;i++) { printf(FORMAT,DATA);//将信息打印 } } void input()//录入学生信息模块 { int i,a=0,n;//a是记录的条数 char ch[2]; FILE *fp;//定义文件指针 if((fp=fopen("data.txt","a+"))==NULL)//打开指定文件 a+:为读/写打开一个指定文件 第一次打开文件,寻找原本存在的学生信息并且显示出来 { printf("不能打开文件\n"); return; } while(!feof(fp)) { if(fread(&stu[a],LEN,1,fp)==1) a++; //记录当前条数 } fclose(fp); if(a==0) printf("不能记录!\n"); else { system("cls"); show(); } if((fp=fopen("data.txt","wb"))==NULL)//wb:(只写)为输出打开一个二进制文件 第二次打开文件,往文件里写入学生信息 { printf("不能打开文件\n"); return; } for(i=0;i<a;i++) fwrite(&stu[i],LEN,1,fp); printf("请输入y/n(提示,输入y继续输入,输入n结束输入):"); scanf("%s",ch); while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { printf("学号"); scanf("%d",&stu[a].num); for(i=0;i<a;i++) if(stu[i].num==stu[a].num) { printf("该学号已存在,请按任何键继续!"); getch(); fclose(fp); return; } printf("姓名:"); scanf("%s",stu[a].name); printf("高数:"); scanf("%d",&stu[a].gaos_score); printf("C语言:"); scanf("%d",&stu[a].cyy_socre); printf("英语:"); scanf("%d",&stu[a].English_score); stu[a].sum=stu[a].gaos_score+stu[a].cyy_socre+stu[a].English_score; if(fwrite(&stu[a],LEN,1,fp)!=1) { printf("不能保存!"); getch(); } else { printf("%s 已被保存!\n",stu[a].name); a++; } printf("是否继续y/n(提示,输入y继续输入,输入n结束输入):"); scanf("%s",ch); } fclose(fp); printf("OK!请按任意键返回主菜单!\n"); } void search()//查询学生信息 { FILE *fp; int snum,i,a=0; char ch[2]; if((fp=fopen("data.txt","rb"))==NULL)//rb:(只读)以二进制形式 { printf("不能打开文件\n"); return; } while(!feof(fp)) { if(fread(&stu[a],LEN,1,fp)==1) a++; } fclose(fp); if(a==0) { printf("没有记录!\n"); return; } printf("请输入要查询学生的学号:"); scanf("%d",&snum); for(i=0;i<a;i++) if(snum==stu[i].num) { printf("已经找出该学生,是否要显示(y/n):"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { printf("学号 姓名 高数 C语言 大学英语 总分\t\n"); printf(FORMAT,DATA); break; } } if(i==a) printf("未能找到要查询的信息!\n"); printf("请按任意键返回主菜单!\n"); } void del()//删除学生信息 { FILE *fp; int snum,i,j,a=0; char ch[2]; if((fp=fopen("data.tx 4000 t","r+"))==NULL) { printf("不能打开文件\n"); return; } while(!feof(fp)) if(fread(&stu[a],LEN,1,fp)==1) a++; fclose(fp); if(a==0) { printf("没有记录!\n"); return; } printf("请输入要删除学生的学号:"); scanf("%d",&snum); for(i=0;i<a;i++) if(snum==stu[i].num) break; printf("已经找到该学生,是否删除(y/n):"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否要进行删除 for(j=i;j<a;j++) stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置 a--;//记录的总个数减1 if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打开文件\n"); return; } for(j=0;j<a;j++)//将更改后的记录重新写入指定的磁盘文件中 if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("不能保存!\n"); getch(); } fclose(fp); printf("修改成功!\n"); printf("请按任意键返回主菜单!\n"); } void modify()//修改学生信息 { FILE *fp; int snum,i,j,a=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("不能打开文件!\n"); return; } while(!feof(fp)) //判断文件指针是否指到文件末尾 if(fread(&stu[a],LEN,1,fp)==1) a++; if(a==0) { printf("没有记录!\n"); fclose(fp); return; } printf("请输入你想修改的信息的学生学号!\n"); scanf("%d",&snum); for(i=0;i<a;i++) if(snum==stu[i].num) break; printf("已经找到该学生,请进行修改!\n"); printf("姓名:"); scanf("%s",stu[i].name); printf("高数:"); scanf("%d",&stu[i].gaos_score); printf("C语言:"); scanf("%d",&stu[i].cyy_socre); printf("英语:"); scanf("%d",&stu[i].English_score); stu[i].sum=stu[i].gaos_score+stu[i].cyy_socre+stu[i].English_score; if((fp=fopen("data.txt","wb"))==NULL) { printf("不能够打开文件!\n"); return; } for(j=0;j<a;j++) if(fwrite(&stu[j],LEN,1,fp)!=1) { printf("不能保存!\n"); getch(); } fclose(fp); printf("请按任意键返回主菜单!\n"); } void insert()//插入学生信息 { FILE *fp; int i,j,k,snum,m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("不能打开文件!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("没有记录!\n"); fclose(fp); } printf("请选择你要插入的位置!(输入要插入的已存在的学号)\n"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num) break; for(j=m-1;j>i;j--)//将i以后的数字依次推后一位 stu[j+1]=stu[j]; printf("请输入新的信息!\n"); printf("学号:"); scanf("%d",&stu[i+1].num); for(k=0;k<m;k++) if(stu[k].num==stu[i+1].num) { printf("学生信息已经成功插入,请按任意键继续!\n"); getch(); fclose(fp); } printf("姓名:"); scanf("%s",stu[i+1].name); printf("高数成绩:"); scanf("%d",&stu[i+1].gaos_score); printf("C语言成绩:"); scanf("%d",&stu[i+1].cyy_socre); printf("英语成绩:"); scanf("%d",&stu[i+1].English_score); stu[i+1].sum =stu[i+1].gaos_score+stu[i+1].cyy_socre+stu[i+1].English_score; if((fp=fopen("data.txt","wb"))==NULL) { printf("不能够打开文件!\n"); return; } for(k=0;k<m+1;k++) if(fwrite(&stu[k] ,LEN,1,fp)!=1) { printf("不能够保存!\n"); getch(); } fclose(fp); printf("请按任意键返回主菜单!\n"); } void order()//将成绩进行排序并输出 { FILE *fp; struct student t; int i,j,m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("不能够打开文件!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有记录!\n"); return; } if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打开文件!\n"); return; } for(i=0;i<m-1;i++) for(j=i+1;j<m;j++) if(stu[i].sum<stu[j].sum) { t=stu[i]; stu[i]=stu[j]; stu[j]=t; } if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打开!\n"); return; } for(j=0;j<m;j++) if(fwrite(&stu[j],LEN,1,fp)!=1) { printf("%s不能储存!\n"); getch(); } fclose(fp); show(); printf("请按任意键返回主菜单!\n"); } void number()//统计学生数量 { FILE *fp; int m=0; if((fp=fopen("data.txt","r+"))==NULL) { printf("不能够打开文件!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("不能够记录!\n"); fclose(fp); return; } printf("这个班共有%d个学生!\n",m); fclose(fp); printf("请按任意键返回主菜单!\n"); }
相关文章推荐
- C语言实现学生成绩管理系统
- C语言链表实现的简易学生成绩管理系统
- [置顶] c语言文件读取 学生成绩管理系统的设计与实现
- 学生成绩管理系统C语言代码实现
- C语言实现---学生成绩管理系统
- C语言实现学生成绩管理系统
- C语言实现学生成绩管理系统
- C语言实现学生成绩管理系统设计
- C语言实现简单学生成绩管理系统
- C语言利用结构体数组实现学生成绩管理系统
- C语言实现---学生成绩管理系统
- C语言实现学生成绩管理系统
- 基于C语言实现学生成绩管理系统
- 学生成绩管理系统课程设计(C语言,链表实现)
- (C语言) 怎么用代码实现一个学生成绩管理系统
- C语言实现学生成绩管理系统
- C语言——学生成绩管理系统
- 文件读取 学生成绩管理系统的设计与实现
- 《C语言编写 学生成绩管理系统》
- [置顶] C语言项目--教师信息/学生成绩管理系统