首页 > 代码库 > 【学生成绩管理系统】 大二c语言作业
【学生成绩管理系统】 大二c语言作业
几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值...
#include <cstdio>#include <conio.h>#include <iostream>#include <process.h>#include <stdlib.h>#include <algorithm>#include <cstring>#include <cmath>#define N 5const int maxn = 1002;using namespace std;void log_in(); // 登录系统void menu(); // 菜单void input(); // 输入数据void savecore(); // 保存数据void loadscore(); // 读取文件void stdavg(); // 求平均数的算法void delete_(); // 删除一个已知学号的学生的全部信息,并选择是否排序void passrate(); // 及格率void variance(); // 均方差void browse(); // 显示数据void function(); // 个性设计模拟动态链表实现增加n个学生成绩并排序void read(); // 以下四个函数为实现function功能的嵌套函数void add();void output();void solve();typedef struct student{ int number; char name[20]; float math; float english; float computer; float average; bool operator <(const struct student &a)const // c++的sort排序 { return average>a.average; }}STU;STU stu[N];typedef struct func_ //个性化设计结构体{ char name[102]; //姓名 int no; //学号 int score; //分数}NODE;NODE node[maxn];int top;int cmp(const func_ &a,const func_ &b) // c++中sort函数排序{ return a.score > b.score;}int main(){ log_in(); menu(); return 0;}void log_in(){ short i; char name[20],key[20]; cout << "欢迎进入教务综合管理系统登陆界面,请输入您的用户名和密码" << endl; cout << "初次登录用户名为yang,密码为grade_system " << endl; cout << endl; while(1) { cout << "please input the user‘s name:(中间请用_间隔)" << endl; cin >> name; cout << "please input your key(12 bits):" << endl; for(i=0;i<12;i++) { key[i]=getch(); printf("*"); } key[i]=‘\0‘; getch(); if(strcmp(name,"yang")==0&&strcmp(key,"grade_system")==0)break; cout << "\nerror!" << endl; cout << "please input again!" <<endl; } cout << "great!wait a minute..." << endl ; system("cls");}void menu() { char ch; while(1) { cout << " \t\t欢迎进入教务综合管理系统登陆界面!\n" <<endl; cout << " \t\t* * * * * * * * * * * * * * * * * * * * *" << endl; cout << " \t\t* \t Menu: \t*" << endl; cout << " \t\t* \t0. input \t*" << endl; cout << " \t\t* \t1. savecore \t*" << endl; cout << " \t\t* \t2. loadcore \t*" << endl; cout << " \t\t* \t3. delete \t*" << endl; cout << " \t\t* \t4. passrate \t*" << endl; cout << " \t\t* \t5. variance \t*" << endl; cout << " \t\t* \t6. grade chart \t*" << endl; cout << " \t\t* \t7. personality design \t*" << endl; cout << " \t\t* \t8. Exit \t*" << endl; cout << " \t\t* * * * * * * * * * * * * * * * * * * * *" <<endl; cout << "\t\t\t请选择对应序号: "; cin >> ch; switch(ch) { case ‘0‘:{input();break;}; case ‘1‘:{savecore();break;}; case ‘2‘:{loadscore();break;} case ‘3‘:{delete_();break;}; case ‘4‘:{passrate();break;}; case ‘5‘:{variance();break;}; case ‘6‘:{browse();break;}; case ‘7‘:{function();break;}; case ‘8‘:{ cout <<"Goodbye~~"<< endl; exit(1);}; default:cout << "input wrong,please input again!" <<endl; } getchar (); }}void input(){ int i,j; struct student *p=stu; cout << "now please begin to input the student‘s data:" << endl; cout << "注意:学号为int型,姓名之间若有间隔一定用连接,分数之间加空格" << endl; cout << endl; for(i=0;i<N;i++) { j=i+1; cout << "input" << ‘ ‘ << j << "‘s number name and the score of the math english computer:" << endl; cin >> (p+i)->number; cin >> (p+i)->name; cin >> (p+i)->math; cin >> (p+i)->english; cin >> (p+i)->computer; } cout << "Now we have already input all the data!" << endl;}void savecore(){ FILE *fp; struct student *q=stu; int i; char ch; getchar(); cout << "next,do you want to save file?(Y/N)" << endl; if((ch=getchar())==‘Y‘) { if((fp=fopen("d:\\score.txt","w"))==NULL) { cout << "File open error!" << endl; exit(0); } for(i=0;i<N;i++,q++) { if(fwrite(q,sizeof(STU),1,fp)==1) { if(i==N-1) { cout << "you have saved successfully!" << endl; cout << "press enter to continue" << endl; } } else cout << "file write wrong!" <<endl; } getchar(); fclose(fp); }}void loadscore(){ FILE *fp; int i; char ch; getchar(); printf("do you want to open the file?(Y/N)\n"); if((ch=getchar())==‘Y‘) { if((fp=fopen("d:\\score.txt","r"))==NULL) { cout << "File open error!" <<endl; exit(0); } for(i=0;!feof(fp);i++) //测试文件是否结束 { fread(&stu[i],sizeof(STU),1,fp); }//原型为unsigned fwrite(void *buffer,unsigned size,unsigned count,FILE *fp) cout << "you have loaded successfully!" << endl; cout << "press enter to continue" << endl; getchar(); fclose(fp); }}void browse() { stdavg(); sort(stu,stu+N); int i; char chart[][10]={" ","Numb","Name","Math","Engl","Comp","Aver"}; printf("\n\n\nNow the chart of student‘s grade is as below:\n"); printf("***************************************************************************\n\t"); for(i=1;i<7;i++) { printf("%s\t",chart[i]); } printf("\n"); for(i=0;i<N;i++) { printf(" \t%ds \t%.2f \t%.2f \t%.2f \t%.2f",stu[i].number,stu[i].name,stu[i].math, stu[i].english,stu[i].computer,stu[i].average); printf("\n"); } printf("\n"); printf("***************************************************************************\n");}void stdavg(){ int i; float s; for(i=0;i<N;i++) { s=0; s+=stu[i].math+stu[i].english+stu[i].computer; stu[i].average=s/3; }}void passrate(){ float s,count_=0; int i; stdavg(); for(i=0;i<N;i++) { if(stu[i].average>=60) { count_++; } } s=count_/N*100; cout << "the passrate is " << s << ‘%‘ << endl; cout << endl;}void read(){ int n,i; top = 0; cout << "请输入当前学生人数" << endl; cin >> n; cout << "请输入学生的名字,学号(这里默认为int),分数(中间用空格间隔)" << endl; for(i=0;i<n;i++) { scanf("%s %d %d",node[top].name,&node[top].no,&node[top].score); if(node[top].score >= 60) { top++; } }}void add(){ cout << "please input:" << endl; cin >> node[top].name ; cin >> node[top].no; cin >> node[top].score; if(node[top].score >= 60) { top++; }}void output(){ sort(node,node+top,cmp); for(int i=0;i<top;i++) { printf("%s %d %d\n",node[i].name,node[i].no,node[i].score); }}void solve(){ int judge; cout << "提示:" << endl; cout << "输入‘0‘结束" << endl; cout << "输入‘1‘增加学生操作" << endl; cout << "输入‘2‘输出及格学生当前排榜单" << endl; while(scanf("%d",&judge) && judge) { if(judge == 1) { add(); cout<<"\n提示:输入‘0‘结束\n输入‘1‘增加学生操作\n输入‘2‘输出及格学生当前排榜单\n"<<endl; } else if(judge == 2) { cout <<"当下所有及格学生的排名情况如下\n" << endl; output(); cout<<"\n提示:输入‘0‘结束\n输入‘1‘增加学生操作\n输入‘2‘输出及格学生当前排榜单\n"<<endl; } }}void function(){ cout << "现在我们进入综合的个性类学生成绩管理系统" << endl; cout << "本个性设计旨在仿照malloc的动态分配内存" << endl; cout << endl; read(); solve();}void delete_(){ int i,j,m; char ch; stdavg(); cout << "input the number you want to delete_:\n" << endl; cin >> m; getchar(); // cout << "numb" << ‘\t‘ << "name" << ‘\t‘ << "math" << ‘\t‘ << "endl" << ‘\t‘ << "comp" <<‘\t‘ << "aver" <<endl; for(j=0;j<N;j++) { if(stu[j].number!=m) { cout << stu[j].number << ‘\t‘ <<stu[j].name << ‘\t‘ << stu[j].math << ‘\t‘ << stu[j].english << ‘\t‘ << stu[j].computer << ‘\t‘ << stu[j].average << endl; } } cout << "若之前进行过显示数据操作(即菜单中的第六项操作)则已经排序好,否则为输入顺序" << endl; cout << "do you want to sort the grade(Y/N) ?" << endl; ch=getchar(); struct student s; if(ch==‘Y‘) { getchar(); if(stu[j].number!=m) { for(i=0;i<N-1;i++) { for(j=i+1;j<N;j++) { if(stu[j].average>stu[i].average) { s=stu[i]; stu[i]=stu[j]; stu[j]=s; } } } } cout << "now the sorted chart is:" <<endl; cout << "numb" << ‘\t‘ << "name" << ‘\t‘ << "math" << ‘\t‘ << "endl" << ‘\t‘ << "comp" <<‘\t‘ << "aver" <<endl; for(j=0;j<N;j++) { if(stu[j].number!=m) { cout << stu[j].number << ‘\t‘ <<stu[j].name << ‘\t‘ << stu[j].math << ‘\t‘ << stu[j].english << ‘\t‘ << stu[j].computer << ‘\t‘ << stu[j].average << endl; } } } cout <<"press enter to continue" << endl;}void variance(){ float s=0,sum=0,sum_,var; int i; stdavg(); for(i=0;i<N;i++) { s=s+stu[i].average; } var=s/N; for(i=0;i<N;i++) { sum+=(stu[i].average-var)*(stu[i].average-var); } sum_= sum/N; cout << "the all student‘s average variance is :" << sum_ << endl;}
帮别人调试的另一个版本
#include<stdio.h>#include<string.h>#include<stdlib.h> #include<conio.h> #define N 100 #define M 3 #define LEN 9 void menu();void browse();typedef struct student { char num[11]; char name[20]; int score[M]; double ave;}STU;STU stu[N]; int save(int n) { FILE *fp; int i; if((fp=fopen("tangjie.txt","wb"))==NULL) { printf("无法打开文件!\n任意键退出程序... ...\n"); getch(); return 0; } for(i=0;i<n;i++) if(stu[i].ave!=0) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("文件写入发生错误\n"); fclose(fp); return 0; }int load(){ FILE *fp; int i; if((fp=fopen("tangjie.txt","rb"))==NULL) //以二进制读的方式打开 { printf("无法打开文件!\n任意键退出程序... ...\n"); //显示不能打开文件的信息 getch(); //预防闪屏 return 0; } for(i=0;!feof(fp);i++) fread(&stu[i],sizeof(struct student),1,fp); //将文件数据读入学生结构体 fclose(fp); return(i-1); //返回目前总的记录个数*/}void printf_back(){ int w; printf("\n\t操作成功!\n"); printf("\t请选择!\n\t1).立刻浏览全部数据\t2).返回:[ ]\b\b"); scanf("%d",&w); if(w==1) browse(); else menu();}void printf_face(){ printf("\n\t学号\t姓名\t\t 数学\t 英语 C语言 平均分\n"); }void average(int i){ int j,sum; for(sum=0,j=0;j<M;j++) sum+=stu[i].score[j]; stu[i].ave=sum*1.0/M;}void no_deal(int i){ int j,l,a; l=strlen(stu[i].num); if(l<LEN) { for(j=LEN-l,a=0;j<LEN;j++) { stu[i].num[j]=stu[i].num[a++]; } stu[i].num[i]=‘\0‘; for(a=0;a<LEN-l;a++) stu[i].num[a]=‘0‘; } if(l>LEN) stu[i].num[l]=‘\0‘;}int no_input(int i,int n) { int j,k,w1; do{ w1=0; printf("学号:\t\t 【%d位,低于%d位前面补0,长的截尾处理!】\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",LEN,LEN); scanf("%s",stu[i].num); no_deal(i); for(j=0;stu[i].num[j]!=‘\0‘;j++) if(stu[i].num[j]<‘0‘ || stu[i].num[j]>‘9‘) { puts("请输入0~9的数字!\n"); w1=1; break; } if(w1!=1) for(k=0;k<n;k++) if(k!=i && strcmp(stu[k].num,stu[i].num)==0) { puts("已存在!\n"); w1=1; break; } } while(w1==1); return 0;}int score_input(int i){ int j; for(j=0;j<M;j++) { printf("分数 %d:",j+1); scanf("%d",&stu[i].score[j]); } return 0;}void input(int i){ no_input(i,i); printf("姓名:"); scanf("%s",stu[i].name); score_input(i); average(i); }void printf_one(int i){ int j; printf("s %-14s",stu[i].num,stu[i].name); for(j=0;j<M;j++) printf("?",stu[i].score[j]); printf(" %9.2f\n",stu[i].ave); }void topput___(){ printf("\n 记 录浏览 "); printf("\n--------------------------------------------------------------------------------\n");}void puts___(){ printf("\n\n--------------------------------------------------------------------------------\n");}int modify_data(int i,int n) { int c,w1; do { puts("\n请选择修改项: =>\n\n1).学号\t2).姓名\t3).数学\t4).英语\t5).C语言\n6).重输所有分数\t7).重输所有记录\t8).取消并返回"); printf("请选择:[ ]\b\b"); scanf("%d",&c); if(c>8 || c<1) { puts("\n选择错误"); getchar(); } }while(c>8 || c<1); do { switch(c) { case 1:no_input(i,n);break; case 2:printf("姓名:");scanf("%s",stu[i].name);break; case 3:printf("数学:");scanf("%d",&stu[i].score[0]);break; case 4:printf("英语:");scanf("%d",&stu[i].score[1]);break; case 5:printf("C语言:");scanf("%d",&stu[i].score[2]);break; case 6:score_input(i);break; case 7:input(i);break; case 8:menu(); } if(c>2 && c<7) average(i); puts("\n现在:\n"); printf_face(); printf_one(i); //显示修改后的数据 printf("\n确定当前的决定?\n\n\t1).是 \t2).否\n\t3).不保存退出[ ]\b\b"); scanf("%d",&w1); }while(w1==2); return w1; //返回控制值}void enter(){ int i,n; system("CLS"); //引用外部清屏 printf("输入要记录的学生数:(1~%d)?\t[‘0‘返回]:\n",N); scanf("%d",&n); //要输入的计入个数 if(n==0) menu(); //输 0 的时候返回 else { printf("\n\t开始输入...\n"); for(i=0;i<n;i++) { printf("\n请输入第%d个的记录.\n",i+1); input(i); //调用输入函数 } if(i!=0) save(n); //调用保存函数 printf_back(); } }int add(){ int i,n,m,k; FILE *fp; system("CLS"); n=load(); //获得总记录的个数,并加载记录 printf("需要加入的学生人数:(0 ~ %d)?:",N-n); scanf("%d",&m); //输入要追加记录的个数 if(m==0) menu(); else { k=m+n; for(i=n;i<k;i++) { printf("\n请输入第%d个的记录.\n",i-n+1); input(i); //调用输入函数 } if((fp=fopen("tangjie.txt","ab"))==NULL) { printf("文件无法打开!\n"); //显示不能打开文件的信息 getch(); return 0; } for(i=n;i<k;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("文件写入错误!\n"); fclose(fp); printf_back(); } return 0;}void modify(){ struct student s; int i,n,k,w0=0,w1,w2=0; n=load(); //获得总记录的个数,并加载记录 do { system("CLS"); k=-1; topput___(); printf_face(); for(i=0;i<n;i++) printf_one(i); //调用显示一个记录的函数 puts___(); do { printf("\n\n输入要修改记录的学号! :\t"); if(scanf("%s",s.num)!=1) //输入要修改数据的学号 menu(); for(i=0;i<n;i++) //查找要修改的数据 if(strcmp(s.num,stu[i].num)==0) { k=i; //找到要修改的记录 s=stu[i]; } if(k==-1) printf("\n\n不存在! 请重新输入"); }while(k==-1); printf_face(); //调用显示数据结构项目函数 printf_one(k); w1=modify_data(k,n); if(w1==1) //代表确认修改 { printf("\n操作成功!\n\n决定修改其他信息吗?\n\n\t1).是的\t2).不!保存并返回\t[ ]\b\b"); scanf("%d",&w0); w2=1; } else { w0=0; if(w2==1) stu[k]=s; } if(w0!=1 && w2==1) save(n); }while(w0==1); menu(); //返回主菜单}void del(){ struct student s; int i,k,n,c,w0=1; system("CLS"); n=load(); //获得总记录的个数,并加载记录 do { system("CLS"); k=-1; topput___(); printf_face(); for(i=0;i<n;i++) if(stu[i].ave!=0) printf_one(i); //显示所有数据 puts___(); do { printf("\n\n输入你要删除记录的学号! NO.:\t"); if(scanf("%s",s.num)!=1) menu(); for(i=0;i<n;i++) if(strcmp(s.num,stu[i].num)==0) { k=i; s=stu[i]; } if(k==-1) printf("\n\n不存在! 请重新输入!"); }while(k==-1); puts("\n"); printf_face(); printf_one(k); //显示要删除的记录 printf("\n确定?\n\t1).是 2).否 3).不保存退出[ ]\b\b"); scanf("%d",&c); if(c==1) { stu[k].ave=0; printf("\n\n操作成功!\n\n要继续删数据吗?\n\t1).继续 2).返回主菜单\t[ ]\b\b"); scanf("%d",&w0); } if(c==3) w0=0; //不删除直接返回 if(w0!=0 && c!=3) save(n); }while(w0==1); menu();}void browse(){ int i,n; n=load(); //获得总记录的个数,并加载记录 system("CLS"); topput___(); printf_face(); for(i=0;i<n;i++) //循环输出所有学生的信息 printf_one(i); puts___(); printf("\n\t 这里一共有 %d 个记录!\n",n); printf("\n\t 输入任意键返回主菜单... ..."); getch(); menu();}void search(){ int i,n,k,w1=1,w2,w3,w4; struct student s; system("CLS"); n=load(); //获得总记录的个数,并加载记录 do { do { k=-1; printf("\n\n输入你要查找记录的姓名:"); scanf("%s",s.name); printf_face(); for(i=0;i<n;i++) if(strcmp(s.name,stu[i].name)==0) { k=i; printf_one(k); //考虑到同名的情况,可能输出不只一个,把所有的记录都查找一下 } if(k==-1) //没找到相同的 { printf("\n\n不存在! 请重新输入!"); printf("\n\n继续?\n\t1).是\t 2).否 \t[ ]\b\b"); scanf("%d",&w1); } }while(k==-1 && w1!=2); w4=w3=0; if(k!=-1) { printf("\n\n接着干什么?\n\t1).再次查找 2).修改 3).删除 4).返回主菜单 [ ]\b\b"); scanf("%d",&w2); switch(w2) { case 2:w3=modify_data(k,n);break; case 3: { printf("\n\n确定?\n\t1).是 2).否 \t[ ]\b\b"); scanf("%d",&w4); if(w4==1) //表示确定删除 stu[k].ave=0; break; } } if(w3==1 || w4==1) { save(n); printf("\n\n操作成功!"); printf("\n\n继续\n\t1).再次查找 2).返回 [ ]\b\b"); scanf("%d",&w2); } } }while(w2==1); menu();}void order(){ int i,j,k,n; struct student s; system("CLS"); //清屏 n=load(); //获得总记录的个数,并加载记录 for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(stu[j].ave>stu[k].ave) //选择法排序,按平均分降序 k=j; s=stu[i]; stu[i]=stu[k]; stu[k]=s; } save(n); puts("\n\n"); printf_back();}void menu(){ int n,w1; do { system("CLS");; puts("\n\t\t\t\t学生信息管理系统\n"); puts("\t ------- 汤杰 \n"); puts("\t ************************ 主菜单 *********************\n\n"); puts("\t\t\t 1.学生信息及成绩录入"); puts("\t\t\t 2.添加信息"); puts("\t\t\t 3.修改信息"); puts("\t\t\t 4.删除信息"); puts("\t\t\t 5.输出统计结果"); puts("\t\t\t 6.查询信息"); puts("\t\t\t 7.成绩排序"); puts("\t\t\t 0.退出系统"); puts("\n\n\t ****************************************************\n"); printf("\t输入你的选择(0~7):[ ]\b\b"); scanf("%d",&n); if(n<0 || n>7) { w1=1; printf("\t你的选择不再 0 到 7 之间,按任意键重新输入!"); getch(); } else w1=0; }while(w1==1); switch(n) { case 1:enter();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:browse();break; case 6:search();break; case 7:order();break; case 0:exit(0);break; }}void main(){ menu();}
【学生成绩管理系统】 大二c语言作业
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。