【学生成绩管理】
实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。
能实现对学生信息的简单管理。 具体要求:
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如: (1):信息输入(INPUT) (2):总分统计(COUNT) (3):总分排序(SORT) (4):查询(QUERY) 其中: (1):对4个学生的信息进行输入; (2):对每个学生的3门课程统计总分;
(3):对4个学生的总分按降序排序并显示出来; (4):查询输入一个学号后,显示出该学生的有关信息;
用的大一做的系统,由保存数据结构的object.cpp 主函数 main.cpp 方法头文件use.h组成
Use.h
#ifndef USE_H_INCLUDED #define USE_H_INCLUDED
#endif // USE_H_INCLUDED #include void Meau() { printf(\"-------欢迎使用学生信息管理系统 -------\\n--------------------------------------\\n输入指令完成命令: \\n1.打印信息\\n2.插入新信息\\n3.删除学生信息\\n4.查找学生\\n5.更改学生信息\\n6.排序显示学生信息\\n7.文件另存为\\ne.保存并退出\\n--------------------------------------\\n请输入指令\\n\"); } void ZhuangBSave() { int T=2; while(T--) . . { system(\"cls\"); Meau(); Sleep(500); printf(\"Saveing.\\r\"); Sleep(500); printf(\"Saveing..\\r\"); Sleep(500); printf(\"Saveing...\\r\"); Sleep(500); printf(\"Saveing....\\r\"); Sleep(500); printf(\"Saveing.....\\r\"); } } void ZhuangBExit() { int c=6; while(c--) { printf(\"Saved!And he program will be close in %d second.\\r\ Sleep(1000); } } Object.h #include long long num; char a[10]; int ch; int ma; int en; int c; int ph; int sum; struct score *next; }; . . void swap(score* p1,score* p2) { int t; t=p1->num; p1->num=p2->num; p2->num=t; t=p1->ch; p1->ch=p2->ch; p2->ch=t; t=p1->ma; p1->ma=p2->ma; p2->ma=t; t=p1->en; p1->en=p2->en; p2->en=t; t=p1->c; p1->c=p2->c; p2->c=t; t=p1->ph; p1->ph=p2->ph; p2->ph=t; char c[10]; strcpy(c,p1->a); strcpy(p1->a,p2->a); strcpy(p2->a,c); } bool cmp0(score* p1,score* p2) { return p1->num bool cmp01(score* p1,score* p2) { if(p1->ch==p2->ch) return p1->num bool cmp11(score* p1,score* p2) { if(p1->ch==p2->ch) return p1->num . . return p1->ch>p2->ch; } bool cmp02(score* p1,score* p2) { if(p1->ma==p2->ma) return p1->num bool cmp12(score* p1,score* p2) { if(p1->ma==p2->ma) return p1->num bool cmp03(score* p1,score* p2) { if(p1->en==p2->en) return p1->num bool cmp13(score* p1,score* p2) { if(p1->en==p2->en) return p1->num bool cmp04(score* p1,score* p2) { if(p1->c==p2->c) return p1->num bool cmp14(score* p1,score* p2) { if(p1->c==p2->c) return p1->num bool cmp05(score* p1,score* p2) { if(p1->ph==p2->ph) return p1->num . . bool cmp15(score* p1,score* p2) { if(p1->ph==p2->ph) return p1->num bool cmp06(score* p1,score* p2) { if(p1->sum==p2->sum) return p1->num bool cmp16(score* p1,score* p2) { if(p1->sum==p2->sum) return p1->num bool cmp07(score* p1,score* p2) { if(strcmp(p1->a,p2->a)==1) return 1; else return 0; } bool cmp17(score* p1,score* p2) { if(strcmp(p1->a,p2->a)==1) return 0; else return 1; } void ScoreSort(struct score *head,bool (*cmp)(score* p1,score* p2)) { struct score *p1,*p2; for(p1=head; p1!=NULL; p1=p1->next) for(p2=p1->next; p2!=NULL; p2=p2->next) { if((*cmp)(p1,p2)) { swap(p1,p2); } } . . } void ScorePri(struct score *head) { //int c=0; //system(\"cls\"); printf(\"=================================================\\n\"); struct score *pri; pri=head; while(pri!=NULL) { //printf(\"test %d\\n\ printf(\"学号:%I64d 姓名:%s\\n语文:%d 数学:%d 英语:%d \\nc语言:%d 物理:%d \\n总成绩:%d 平均成绩:%.2lf \\n=================================================\\n\a,pri->ch,pri->ma,pri->en,pri->c,pri->ph,pri->sum,pri->sum/5.0); pri=pri->next; } printf(\"End\\n\"); } struct score *ScoreIns(struct score *head) { struct score *p1,*p2,*newl; newl=(score*)malloc(sizeof(score)); printf(\"请依次输入学号,语文,数学,英语,c语言,物理成绩\\n\"); scanf(\"%I64d%d%d%d%d%d\l->c,&newl->ph); newl->sum=newl->ch+newl->ma+newl->en+newl->c+newl->ph; printf(\"输入学生姓名\\n\"); scanf(\"%s\ if(head==NULL) { head=newl; newl->next=NULL; return head; } p1=head; p2=p1->next; if(newl->num newl->next=head; return newl; } . . while(p2!=NULL) { if(newl->num>p1->num&&newl->num newl->next=p2; p1->next=newl; break; } p1=p2; p2=p1->next; } if(p2==NULL) { p1->next=newl; newl->next=NULL; } return head; } void ZhuangBDel() { Sleep(500); printf(\"删除中.\\r\"); Sleep(500); printf(\"删除中..\\r\"); Sleep(500); printf(\"删除中...\\r\"); Sleep(500); printf(\"删除中....\\r\"); Sleep(500); printf(\"删除中.....\\r\"); Sleep(500); printf(\"已删除!\\n\"); } struct score *ScoreDel(struct score *head) { struct score *p1,*p2,*h; long long n=0; int flag,flag1=0; int ord; char n1[100],s[2]; flag=0; printf(\"输入1学号查询,输入2姓名查询\\n\"); . . scanf(\"%d\ if(ord==1) { printf(\"请输入学号\\n\"); scanf(\"%I64d\ } else if(ord==2) { printf(\"请输入姓名\\n\"); scanf(\"%s\ } else { printf(\"Illegal input\\n\"); return head; } if(ord==1) { printf(\"您要删除的学生学号为%I64d,是否删除?(Y/N)\ scanf(\"%s\ if(strcmp(s,\"Y\")!=0) return head; } if(ord==2) { printf(\"您要删除的学生姓名为%s,是否删除?(Y/N)\ scanf(\"%s\ if(strcmp(s,\"Y\")!=0) return head; } p1=head; p2=p1->next; if((ord==1&&p1->num==n)||(ord==2&&strcmp(p1->a,n1)==0)) { h=p1->next; free(p1); flag=1; ZhuangBDel(); return h; } else { if(p1->next==NULL) flag1=0; while(flag1!=0&&p2->next!=NULL) . . { if((ord==1&&p1->num==n)||(ord==2&&strcmp(p2->a,n1)==0)) { p1->next=p2->next; free(p2); flag=1; } p1=p2; p2=p1->next; } if(flag1!=0&&p2->next==NULL) { if((ord==1&&p1->num==n)||(ord==2&&strcmp(p2->a,n1)==0)) { p1->next=NULL; free(p2); flag=1; } } } if(flag==0||flag1==1) printf(\"Error:Not Found!\\n\"); else ZhuangBDel(); return head; } void ScoreSearch(struct score *head) { struct score *p1; long long n; int flag; flag=0; printf(\"输入需要查找的学号\\n\"); scanf(\"%I64d\ for(p1=head; p1!=NULL; p1=p1->next) { if(p1->num==n) { printf(\"姓名:%s\\n语文成绩:%d\\n数学成绩:%d\\n英语成绩:%d\\nC语言成绩:%d\\n物理成绩:%d\\n总成绩:%d\\n平均成绩:%.2lf\\n\5.0); flag=1; . . } } if(flag==0) printf(\"Error:Not Found!\\n\"); } void ScoreChange(struct score *head) { long long m; int n,a; char b[100]; struct score *p1; printf(\"请输入需要修改信息的学号\\n\"); scanf(\"%I64d\ for(p1=head; p1!=NULL; p1=p1->next) { if(p1->num==m) break; } if(p1==NULL) { printf(\"Not Found!\\n\"); return; } printf(\"输入1修改语文成绩\\n输入2修改数学成绩\\n输入3修改英语成绩\\n输入4修改c语言成绩\\n输入5修改物理成绩\\n输入6修改姓名\\n\"); scanf(\"%d\ if(a==1) { printf(\"该成员语文成绩为%d,请输入修改值\\n\ scanf(\"%d\ p1->ch=n; printf(\"修改成功!\\n\"); } else if(a==2) { printf(\"该成员数学成绩为%d,请输入修改值\\n\ scanf(\"%d\ p1->ma=n; printf(\"修改成功!\\n\"); } else if(a==3) { printf(\"该成员英语成绩为%d,请输入修改值\\n\ . . scanf(\"%d\ p1->en=n; printf(\"修改成功!\\n\"); } else if(a==4) { printf(\"该成员C语言成绩为%d,请输入修改值\\n\ scanf(\"%d\ p1->c=n; printf(\"修改成功!\\n\"); } else if(a==5) { printf(\"该成员物理成绩为%d,请输入修改值\\n\ scanf(\"%d\ p1->ph=n; printf(\"修改成功!\\n\"); } else if(a==6) { printf(\"该成员姓名为%s,请输入修改值\\n\ scanf(\"%s\ strcpy(p1->a,b); printf(\"修改成功!\\n\"); } else printf(\"输入错误,退出修改\\n\"); } void ScoreView(struct score *head) { int a,b; //bool *cmp(score* p1,score* p2); printf(\"输入1按语文成绩排列\\n输入2按数学成绩排列\\n输入3按英语成绩排列\\n输入4按C语言成绩排列\\n输入5按物理成绩排列\\n输入6按总成绩排列\\n输入7按名字排列\\n\"); scanf(\"%d\ printf(\"输入0升序排列,输入1降序排列\\n\"); scanf(\"%d\ if(a==1&&b==0) ScoreSort(head,&cmp01); if(a==1&&b==1) ScoreSort(head,cmp11); if(a==2&&b==0) . . ScoreSort(head,cmp02); if(a==2&&b==1) ScoreSort(head,cmp12); if(a==3&&b==0) ScoreSort(head,cmp03); if(a==3&&b==1) ScoreSort(head,cmp13); if(a==4&&b==0) ScoreSort(head,cmp04); if(a==4&&b==1) ScoreSort(head,cmp14); if(a==5&&b==0) ScoreSort(head,cmp05); if(a==6&&b==0) ScoreSort(head,cmp06); if(a==6&&b==1) ScoreSort(head,cmp16); if(a==7&&b==0) ScoreSort(head,cmp07); if(a==7&&b==1) ScoreSort(head,cmp17); ScorePri(head); ScoreSort(head,cmp0); } void Save(score *head,char a[]) { FILE *fp; score* pri=head; fp=fopen(a,\"w\"); while(pri!=NULL) { fprintf(fp,\"%I64d %d %d %d \ fprintf(fp,\"%s \ pri=pri->next; } return; } void NSave(score* head) { char a[100],b[100],c[]=\"/\ printf(\"输入另存为的地址\\n\"); . %d %d . scanf(\"%s\ printf(\"输入文件名称\\n\"); scanf(\"%s\ strcat(a,c); strcat(a,b); strcat(a,d); Save(head,a); return; } struct score *Load(score *head) { //int c=0; FILE *fp; fp=fopen(\"E:\\\\data.txt\ if(fp==NULL) { //printf(\"No data\\n\"); return NULL; } freopen(\"E:\\\\data.txt\ score *newl,*p1,*p2; newl=(score*)malloc(sizeof(score)); while(scanf(\"%I64d%d%d%d%d%d\n,&newl->c,&newl->ph)!=EOF) { //printf(\"test %d\\n\ newl->sum=newl->ch+newl->ma+newl->en+newl->c+newl->ph; scanf(\"%s\ if(head==NULL) { head=newl; newl->next=NULL; } p1=head; p2=p1->next; if(newl->num newl->next=head; head=newl; } while(p2!=NULL) { if(newl->num>p1->num&&newl->num . . { newl->next=p2; p1->next=newl; } p1=p2; p2=p1->next; } if(p2==NULL) { p1->next=newl; newl->next=NULL; } newl=(score*)malloc(sizeof(score)); } free(newl); freopen(\"CON\ return head; } Main.cpp #include using namespace std; struct score *Load(score *head); void ScorePri(struct score *head); struct score *ScoreIns(struct score *head); struct score *ScoreDel(struct score *head); void ScoreSearch(struct score *head); void ScoreChange(struct score *head); void ScoreView(struct score *head); void Save(score *head,char a[]); void NSave(score* head); int main() { struct score *key; . . key=NULL; key=Load(key); char keyb; Meau(); while(1) { keyb=getchar(); if(keyb=='1') { ScorePri(key); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); system(\"cls\"); Meau(); } if(keyb=='2') { key=ScoreIns(key); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); system(\"cls\"); Meau(); } if(keyb=='3') { key=ScoreDel(key); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); system(\"cls\"); Meau(); } if(keyb=='4') { ScoreSearch(key); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); . 按任按任按任按任意键意键意键意键继续 继续 继续 继续 . system(\"cls\"); Meau(); } if(keyb=='5') { ScoreChange(key); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); system(\"cls\"); Meau(); } if(keyb=='6') { ScoreView(key); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); system(\"cls\"); Meau(); } if(keyb=='7') { NSave(key); ZhuangBSave(); printf(\"Oo---------------------------------oO\\n\"); getchar(); getchar(); system(\"cls\"); Meau(); } if(keyb=='e') { char inp[]=\"E:\\\\data.txt\"; Save(key,inp); ZhuangBSave(); ZhuangBExit(); return 0; } } return 0; . 按任按任按任意键意键意键继续 继续 继续 . } 功能界面如下: . 因篇幅问题不能全部显示,请点此查看更多更全内容