求大神给做一个成绩管理系统
学生成绩信息包括:学期,学号,班级,姓名,四门课程成绩(语文,数学,英语,计算机)主要功能:1、系统以菜单方式工作,可以循环显示菜单,直至选择退出系统,结束程序。
2、成绩信息录入功能(成绩信息用文件保存)
3、成绩信息浏览功能
4、成绩查询功能。
实现两种查询方式:
按姓名查询。
按课程查询。
5、学生成绩信息的删除与修改。
//学生成绩管理系统 //用户名:xdxy 密码:700619 #include<stdio.h> #include<conio.h> /*清屏*/ #include <stdlib.h> /*显示目录*/ #include<string.h> #define MAX 1000 void menu(); void input(); /*输入数据函数*/ void sort(); /*排序数据函数*/ void display(); /*显示数据函数*/ void display1(); /*显示各科成绩函数*/ void insert(); /*插入数据函数*/ void del(); /*删除数据函数*/ void average(); /*平均值函数*/ void find(); /*查找数据函数*/ void save(); /*保存数据函数*/ void read(); /*读出数据函数*/ void del_file(); /*删除文件函数*/ void modify(); /*修改文件函数*/ int now_no=0; struct student //定义学生信息 { int no; // 学号 char name[20]; //姓名 char sex[4]; //性别 float score1; //成绩1 float score2; //成绩2 float score3; //成绩3 float sort; //排序成绩 float ave; //平均分 float sum; //总分 }; void main() { int h,flag1,flag2; char name[20]="xdxy",password[10]="700619"; char person[20],password1[10]; printf ("\t\t ******** 欢迎进入学生成绩管理系统!********\n\n"); printf ("\t\t\t 用 户 登 录\n\n"); for(h=0;h!=5;) { printf("\t\t\t\t 用户名:"); gets(person); flag1=strcmp(person,name); printf("\t\t\t\t 密码:"); gets(password1); flag2=strcmp(password,password1); if(flag1==0 && flag2==0) { printf("\t\t\t\t 登陆成功!\n\n"); menu(); break; } else { printf ("\t\t\t 用户名或密码错误!\n\n"); printf ("\t\t\t 请注意:您还剩%d次机会!\n\n",4-h); h++; } } if (h=5) printf ("对不起,您输入的用户名或密码有误,已被强制退出。\n"); } struct student stu[MAX],*p; void menu() /*主函数*/ { int as; char ch; do{ printf("\n\n\n\n\t\t****&****&****&****&****&****&****&****&****&****"); start: printf("\n\n\n\n\t\t\t 欢迎使用学生成绩管理系统\n"); printf("\n\n\n\n\t\t******************按任意键继续********************"); ch=getch(); } while(!ch); system("cls"); /*以下为功能选择模块*/ do { printf("\n\t\t\t\t1.录入学生信息\n\t\t\t\t2.显示学生总成绩信息\n\t\t\t\t3.对总成绩排序\n\t\t\t\t4.显示学生单科成绩排序\n\t\t\t\t5.添加学生信息\n\t\t\t\t6.删除学生信息\n\t\t\t\t7.修改学生信息\n\t\t\t\t8.查询学生信息\n\t\t\t\t9.从文件读入学生信息\n\t\t\t\t10.删除文件中学生信息\n\t\t\t\t11.保存学生信息\n\t\t\t\t12.退出\n"); printf("\t\t\t\t选择功能选项(输入所选功能前的数字):"); fflush(stdin); /*可用可不用,用于清除缓存防止下次用scanf输入时出现错误*/ scanf("%d",&as); switch(as) { case 1:system("cls"); input(); break; case 2:system("cls"); display(); break; case 3:system("cls"); sort(); break; case 4:system("cls"); display1(); break; case 5:system("cls"); insert(); break; case 6:system("cls"); del(); break; case 7:system("cls"); modify(); break; case 8:system("cls"); find(); break; case 9:system("cls"); read(); break; case 10:system("cls"); del_file(); break; case 11:system("cls"); save(); break; case 12:system("exit"); exit(0); default:system("cls"); goto start; } }while(1); /*while(1),1表示真,所以while(1)表示永远循环下去*/ /*至此功能选择模块结束*/ } void input() /*学生信息录入模块*/ { int i=0; char ch; do { printf("\t\t\t\t1.录入学生信息\n输入第%d个学生的信息\n",i+1); printf("\n输入8位的学生学号:"); scanf("%u",&stu[i].no); fflush(stdin); printf("\n输入学生姓名:"); fflush(stdin); gets(stu[i].name); printf("\n输入学生性别:"); fflush(stdin); gets(stu[i].sex); printf("\n输入学生成绩1:"); scanf("%f",&stu[i].score1); printf("\n输入学生成绩2:"); fflush(stdin); scanf("%f",&stu[i].score2); printf("\n输入学生成绩3:"); fflush(stdin); scanf("%f",&stu[i].score3); printf("\n\n"); i++; now_no=i; printf("是否继续输入?(Y/N)"); fflush(stdin); ch=getch(); system("cls"); } while(ch!='n'&&ch!='N'); system("cls"); } void sort() /*排序数据函数*/ { struct student temp; int i,j; average(); for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].ave<stu[j].ave) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } printf("排序已完成进入功能2可进行显示\n"); system("pause"); system("cls"); } void sort1() /*排序数据函数*/ { struct student temp; int i,j; for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].score1<stu[j].score1) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } void sort2() /*排序数据函数*/ { struct student temp; int i,j; for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].score2<stu[j].score2) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } void sort3() /*排序数据函数*/ { struct student temp; int i,j; for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].score3<stu[j].score3) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } void display() /*显示数据函数*/ { int i; char as; average(); do { printf("\t\t\t班级学生信息列表\n"); printf("\t学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); for(i=0;i<now_no&&stu[i].name[0];i++) printf("\t%u%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); printf("\t\t\t按任意键返回主菜单"); fflush(stdin); as=getch(); } while(!as); system("cls"); } void display1() /*显示数据函数*/ { int i; char as; do { printf("\t\t\t班级学生score1成绩排序\n"); printf("\t学号\t姓名\t性别\t成绩1\n"); sort1(); for(i=0;i<now_no&&stu[i].name[0];i++) printf("\t%u%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1); printf("\t\t\t班级学生score2成绩排序\n"); printf("\t学号\t姓名\t性别\t成绩2\n"); sort2(); for(i=0;i<now_no&&stu[i].name[0];i++) printf("\t%u%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score2); printf("\t\t\t班级学生score3成绩排序\n"); printf("\t学号\t姓名\t性别\t成绩3\n"); sort3(); for(i=0;i<now_no&&stu[i].name[0];i++) printf("\t%u%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score3); printf("\t\t\t按任意键返回主菜单"); fflush(stdin); as=getch(); } while(!as); system("cls"); } void insert() /*插入数据函数*/ { char ch; do { printf("\n\t\t输入新插入学生信息\n"); printf("\n输入学生学号:"); scanf("%u",&stu[now_no].no); fflush(stdin); printf("\n输入学生姓名:"); fflush(stdin); gets(stu[now_no].name); printf("\n输入学生性别:"); fflush(stdin); gets(stu[now_no].sex); printf("\n输入学生成绩1:"); fflush(stdin); scanf("%f",&stu[now_no].score1); printf("\n输入学生成绩2:"); fflush(stdin); scanf("%f",&stu[now_no].score2); printf("\n输入学生成绩3:"); fflush(stdin); scanf("%f",&stu[now_no].score3); printf("\n\n"); now_no=now_no+1; sort(); printf("是否继续输入?(Y/N)"); fflush(stdin); ch=getch(); system("cls"); } while(ch!='n'&&ch!='N'); } void del() /*删除数据函数*/ {unsigned long inum; int i; printf("输入要删除学生的学号:"); fflush(stdin); scanf("%u",&inum); for(i=0;i<now_no;i++) { if(stu[i].no==inum) { if(i==now_no)now_no-=1; else { stu[i]=stu[now_no-1]; now_no-=1; } sort(); break; } } system("cls"); } void save() /*保存数据函数*/ { FILE *fp; int i; char filepath[20]; printf("输入要保存的文件路径:"); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) { printf("\n保存失败!"); exit(0); } for(i=0;i<now_no;i++) { stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; stu[i].ave=stu[i].sum/3; fprintf(fp,"\t%u%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); } fclose(fp); printf("学生信息已保存在%s中!\n",filepath); system("pause"); system("cls"); } void find() /*查询函数*/ { int i; char str[20],as; do { printf("输入要查询的学生姓名:"); fflush(stdin); gets(str); for(i=0;i<now_no;i++) if(!strcmp(stu[i].name,str)) { printf("\t学号\t\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); printf("\t%u\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); } printf("\t\t\t按任意键返回主菜单"); fflush(stdin); as=getch(); } while(!as); system("cls"); } void average() /*求平均数*/ { int i; for(i=0;i<now_no;i++) { stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; stu[i].ave=stu[i].sum/3; } } void modify() /*修改数据函数*/ { int i; char str[20]; printf("输入要修改的学生姓名:"); fflush(stdin); gets(str); for(i=0;i<now_no;i++) { if(!strcmp(stu[i].name,str)) { system("cls"); printf("\n\t\t输入修改后学生信息\n"); printf("\n输入学生学号:"); fflush(stdin); scanf("%u",&stu[i].no); printf("\n输入学生性别:"); fflush(stdin); gets(stu[i].sex); printf("\n输入学生成绩1:"); fflush(stdin); scanf("%f",&stu[i].score1); printf("\n输入学生成绩2:"); fflush(stdin); scanf("%f",&stu[i].score2); printf("\n输入学生成绩3:"); fflush(stdin); scanf("%f",&stu[i].score3); printf("\n\n"); sort(); break; } } system("cls"); } void read() { FILE *fp; int i; char filepath[20]; printf("输入要读入的文件路径:"); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"r"))==NULL) { printf("找不到%s文件!\n",filepath); system("pause"); exit(0); } now_no=0; for(i=0;i<MAX&&!feof(fp);i++) { fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave); now_no++; } fclose(fp); printf("保存的在文件%s中的所有信息已经读入!\n",filepath); system("pause"); /*按任意键继续*/ system("cls"); } void del_file() { FILE *fp; char filepath[20]; printf("输入要删除的文件路径:"); fflush(stdin); gets(filepath); fp=fopen(filepath,"w"); fclose(fp); printf("保存的在文件%s中的所有信息已经删除!\n",filepath); system("pause"); system("cls"); }