文档详情

学籍成绩管理系统(UCDOS操作系统下C语言版本课程设计)

沈***
实名认证
店铺
DOC
110KB
约31页
文档ID:152864754
学籍成绩管理系统(UCDOS操作系统下C语言版本课程设计)_第1页
1/31

. . . 选题五 学籍成绩管理系统一、学籍成绩管理系统功能设计要求 1. 输入记录:将每一个学生的、学号以与数学、物理、化学、英语、网络课程的成绩作为一个记录该软件能建立一个新的数据文件或给已建立好的数据文件增加记录  2. 显示记录:根据用户提供的记录或根据学生显示一个或几个学生的各门功课的成绩和平均成绩 3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录容进行显示4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录容进行显示5. 删除记录:可删除数据文件中的任一记录6.恢复记录:能恢复被删除的任一记录7.添加记录:可以在数据文件中添加记录并添加记录后对记录容进行显示8. 统计: (A)计算各门课程全班平均成绩与总成绩;(B)统计其课程全班得:100分、 90~99分、80~89分、70~79分、60~69分、59分以下学生人数与全班总人数的百分比;(C)按字符表格形式打印全部学生的平均成绩(包括各课总的平均成绩)。

9.保存数据文件功能10.打开数据文件功能 经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试程序运行结果如下表所示(记录个数至少8个)学生学籍成绩统计表序号数学物理化学英语网络平均01望678988897581.602小明788877947482.203涛967993849689.604林圆879378988488.005黄佳798574928683.2¼¼¼¼¼¼¼¼单科平均成绩81.4086.8082.0091.483.00二、学籍成绩管理系统程序设计基本结构框架1.头文件说明如:#include#include#include#include定义结构类型;定义全局变量;定义、编写记录(数据)输入函数;定义、编写记录(数据)显示函数;定义、编写记录(数据)修改函数;定义、编写记录(数据)查找函数;定义、编写记录(数据)删除函数;定义、编写记录(数据)恢复函数;定义、编写记录(数据)添加函数;定义、编写记录(数据)统计函数;定义、编写数据文件保存函数;定义、编写打开数据文件函数;2.主函数结构如下:main(){char i;int drive=DETECT,mode;initgraph(&drive,&mode," "); 初始化显示器为图形方式cleardevice(); 清屏幕setbkcolor(9); 设置屏幕背景颜色printf("\16[co4st8e320,170,0,360,300,70,2,4]");printf("\16[{-10|2048,24=2(14)9中南大学}]");printf("\16[{-90|14055,55=11(13)9学籍成绩管理系统}]"); printf("\16[{-246|28020,20=8(12)9设计者: 电气信息1020 XXX }]");printf("\16[{-250|36020,20=8(4)9请按Enter键进入}]");getch(); 等待击键for( ; ;) 循环执行功能菜单{cleardevice();setbkcolor(9);printf("\16[{-5|3040,40=30(2)9* * * * * * 菜单 * * * * * *}]");printf("\16[{-130|10035,35=30(7)9a输入}]");printf("\16[{-400|10035,35=30(7)9b 显示}]");printf("\16[{-130|14535,35=30(7)9c修改}]");printf("\16[{-400|14535,35=30(7)9d 查找}]");printf("\16[{-130|20535,35=30(7)9e 删除}]");printf("\16[{-400|20535,35=30(7)9f恢复}]");printf("\16[{-130|26035,35=30(7)9g添加}]");printf("\16[{-400|26035,35=30(7)9h 统计}]");printf("\16[{-130|31535,35=30(7)9i 保存}]");printf("\16[{-400|31535,35=30(7)9j 打开}]");printf("\16[{-130|36035,35=30(7)9k 退出}]");printf("\16[{-400|38024,24=11(7)4请选择a至j}]");i=getch();if(i=='k') break;else switch(i){case'a': 调用记录输入函数;break; case'b': 调用记录显示函数;break; case'c': 调用记录修改函数;break; case'd': 调用记录查找函数;break; case'e': 调用记录删除函数;break; case'f': 调用记录恢复函数;break; case'g': 调用记录添加函数; break; case'h': 调用记录统计函数;break; case'i': 调用数据保存函数;break; case'j': 调用数据文件打开函数; break; }}}3.各子程序函数程序:(程序设计较为匆忙,未曾优化,请见谅)#include#include#include#includestruct student{ char num[20]; /*序号*/ char name[10]; /**/ float score1; /*数学成绩*/ float score2; /*物理成绩*/ float score3; /*化学成绩*/ float score4; /*英语成绩*/ float score5; /*网络成绩*/ float av1; /*平均成绩*/ int vs; /*判断记录是否存在的变量*/};/*struct result{ int f; int p;}; */ struct student student1; struct student total; FILE *fp; char temper[20]; int index=0; int position=0;/*--------------------------------------------------------------------------------------------------------------------------------*//*--------------------------------------------------------------------------------------------------------------------------------*/void fscan(){ float temp1=0,temp2=0,temp3=0,temp4=0,temp5=0,temp6=0; student1.vs=0; fscanf(fp,"%s%s%f%f%f%f%f%f%d\n",student1.num,student1.name,&temp1,&temp2,&temp3,&temp4,&temp5,&temp6,&student1.vs); student1.score1=temp1; student1.score2=temp2; student1.score3=temp3; student1.score4=temp4; student1.score5=temp5; student1.av1=temp6;}void fprint(){ fprintf(fp,"%-7s%-7s%-7.2f%-7.2f%-7.2f%-7.2f%-7.2f%-7.2f%-7d\n",student1.num,student1.name,student1.score1,student1.score2,student1.score3,student1.score4,student1.score5,student1.av1,student1.vs);}void scan(int i) /*输入*/{ float temp1=0,temp2=0,temp3=0,temp4=0,temp5=0; if(i==1||i==8) { printf("请输入学生序号: "); scanf("%s",student1.num); } if(i==2||i==8) { printf("请输入学生: "); scanf("%s",student1.name); } if(i==3||i==8) { while(1) { printf("请输入数学成绩: "); scanf("%f",&temp1); if(temp1<=100&&temp1>=0) {student1.score1=temp1; break; } else printf("请输入正确数据!\n"); } } if(i==4||i==8) { while(1) { printf("请输入物理成绩: "); scanf("%f",&temp2); if(temp2<=100&&temp2>=0) {student1.score2=temp2; break; } else printf("请输入正确数据!\n"); } } if(i==5||i==8) { while(1) { printf("请输入化学成绩: "); scanf("%f",&temp3); if(temp3<=100&&temp3>=0) {student1.score3=temp3; break; } else printf("请输入正确数据!\n"); } } if(i==6||i==8) { while(1) { printf("请输入英语成绩: "); scanf("%f",&temp4); if(temp4<=100&&temp4>=0) {student1.score4=temp4; break; } else printf("请输入正确数据!\n"); } } if(i==7||i==8) { while(1) { printf("请输入网络成绩: "); scanf("%f",&temp5); if(temp5<=100&&temp5>=0) { student1.score5=temp5; /* student1.av1=(temp1+temp2+temp3+temp5+temp5)/5; */ break; } else printf("请输入正确数据!\n"); } } student1.av1=(student1.score1+student1.score2+student1.score3+student1.score5+student1.score5)/5; student1.vs=1;}void print() /*输出*/{ printf("|%-7s|%-7s|%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|\n",student1.num,student1.name,student1.score1,student1.score2,student1.score3,student1.score4,student1.score5,student1.av1); printf("-----------------------------------------------------------------\n");} /*表头*/void handline(){ printf("-----------------------------------------------------------------\n"); printf(" 序号 数学 物理 化学 英语 网络 平均\n"); printf("|-------|-------|-------|-------|-------|-------|-------|-------|\n");}void menu() /*菜单*/{ cleardevice(); clrscr(); printf(">>>>>>>>>>-----<<<<<<<<<<"); printf("\n\t\t>>>>>>>>>>-----<<<<<<<<<<"); printf("\n\t\t\t\t>>>>>>>>>>-----<<<<<<<<<<"); printf("\n\t\t\t\t\t\t>>>>>>>>>>-----<<<<<<<<<<"); printf("\16[{-500|25040,40=2(9)15 菜单}]"); printf("\16[{-200|10016,16=3(8)15 a 输入}]"); printf("\16[{-150|15016,16=3(8)15 b 显示}]"); printf("\16[{-100|20016,16=3(8)15 c 修改}]"); printf("\16[{-50|25016,16=3(8)15 d 查找}]"); printf("\16[{-100|30016,16=3(8)15 e 删除}]"); printf("\16[{-150|35016,16=3(8)15 f 恢复}]"); printf("\16[{-200|40016,16=3(8)15 g 添加}]"); printf("\16[{-300|20016,16=3(8)15 h 统计}]"); printf("\16[{-200|25016,16=3(8)15 i 保存}]"); printf("\16[{-300|30016,16=3(8)15 j 打开}]"); printf("\16[{-400|25016,16=3(8)15 k 退出}]"); printf("\n~(^_^)~");}void tothandline(){/*--------------------------------------------------------------------------------------------------------------------------------*/ int i=0; fp=fopen(temper,"r"); while(!feof(fp)) { fscan(); if(student1.vs!=0)/*判断是否被删除*/ { i++; } }/*--------------------------------------------------------------------------------------------------------------------------------*/ printf("显示数据 |%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|%-7.2f|\n",total.score1/i,total.score2/i,total.score3/i,total.score4/i,total.score5/i,total.av1/i); printf("-----------------------------------------------------------------\n");}void cleartotal() /*清除统计数据*/{ total.score1=0; total.score2=0; total.score3=0; total.score4=0; total.score5=0; total.av1=0;}/*--------------------------------------------------------------------------------------------------------------------------------*//*--------------------------------------------------------------------------------------------------------------------------------*/void input();void output();void change();void search();void delete();void nodelete();void addto();void statistics(); /*统计总分*/void addup(); /*统计函数*/void save();void openfile();void quit();void choose() /*选择界面*/{ char i='0'; for( ; ;) { menu(); cleartotal(); printf("\16[{-400|40032,32=11(8)15 请选择a至j}]"); i=getch(); if(i=='k') quit(); else switch(i) { case'a': input();break;/*调用记录输入函数*/ case'b': output();break;/*调用记录显示函数*/ case'c': change();break;/*调用记录修改函数*/ case'd': search();break;/*调用记录查找函数*/ case'e': delete();break;/*调用记录删除函数*/ case'f': nodelete();break;/*调用记录恢复函数*/ case'g': addto();break;/*调用记录添加函数*/ case'h': addup();break;/*调用记录统计函数*/ case'i': save();break;/*调用数据保存函数*/ case'j': openfile();break;/*调用数据文件打开函数*/ } }}void main(){ int drive=DETECT,mode; registerbgidriver(EGAVGA_driver); initgraph(&drive,&mode," "); cleardevice(); setbkcolor(0); textcolor(RED); printf("\16[co5st7b90,140,425,192]"); printf("\16[{-10|2048,24=2(14)0 中南大学}]"); printf("\16[{-90|14055,55=11(15)0 学籍管理系统}]"); printf("\16[co5st11b246,280,517,300]"); printf("\16[{-246|28020,20=8(15)0 设计者: 电气信息 班级 }]"); printf("\16[{-250|36020,20=8(15)0 请按Enter键进入}]"); getch(); setbkcolor(15); strcpy(temper,"temp.txt"); choose();}/*--------------------------------------------------------------------------------------------------------------------------------*//*--------------------------------------------------------------------------------------------------------------------------------*/void indexup()/*下一页*/{ index++;}void indexdown()/*上一页*/{ if(index>=1) index--; else printf("已经是第一页!");}void input() /*输入*/{ char ch='0'; cleardevice();clrscr(); printf("\16[{-400|40032,32=11(8)15 输入功能}]"); printf("\n\n\n 本操作将清空原数据,确定继续?(输入Y或者N)"); while(1) { scanf("%c",&ch); if(ch=='Y'||ch=='y'||ch=='n'||ch=='N') break; else printf("\n请输入”Y“或”N“!\n"); } if(ch=='Y'||ch=='y') { if((fp=fopen(temper,"w"))==NULL) { printf("无法打开这个文件\n"); getch(); } else addto(); } fclose(fp);}void output() /*输出*/{ int i=0; char ch; cleardevice();clrscr(); cleartotal(); printf("\16[{-400|40032,32=11(8)15 显示全部}]"); if((fp=fopen(temper,"r"))==NULL) { printf("无法打开文件\n"); } else { printf("\n\n\n"); handline(); while(!feof(fp)) { fscan(); if(student1.vs!=0)/*判断是否被删除*/ { i++; statistics(); if(i>=(1+index*7)&&i<(8+7*index)) { print(); } } } } tothandline(); fclose(fp); printf("1上一页,2下一页,输入其他键退出,现在第%d页",index+1); ch=getch(); if(ch=='1') { indexdown(); output(); } else if(ch=='2') { indexup(); output(); }}/*struct result find(int w){ char temp[20],temp2[50],ch; char i; struct result res; res.f=0; res.p=0; printf("\n\n\n 请选择您需要搜索的关键字:\n1序号,2(请输入1到2):"); while(1) { scanf("%c",&i); if(i=='1'||i=='2') break; else printf("请正确输入1到2:"); } if((fp=fopen(temper,"r"))==NULL) { printf("无法打开这个文件\n"); exit(0); } printf("关键字:"); scanf("%s",temp2); printf("\n查询到的信息\n"); handline(); while(!feof(fp)) { res.p=ftell(fp); fscan(); if(i=='1') strcpy(temp,student1.num); else if(i=='2') strcpy(temp,student1.name); if(!strcmp(temp,temp2)&&student1.vs!=0) { res.f=1; print(); statistics(); if(w!=2) { break; } } } tothandline(); if(res.f==0) printf("\n\n查找不到需要的信息"); fclose(fp); return res;} */int find(int a){ int r=0; char temp[20],temp2[50]; char i; position=0; /* rewind(fp); */ /*复位函数*/ printf("\n\n\n 请选择您需要搜索的关键字:\n1序号,2(请输入1到2):"); while(1) { scanf("%c",&i); if(i=='1'||i=='2') break; else printf("请正确输入1到2:"); } if((fp=fopen(temper,"r+"))==NULL) { printf("无法打开这个文件\n"); exit(0); } printf("关键字:"); scanf("%s",temp2); printf("\n查询到的信息\n"); handline(); while(!feof(fp)) { position=ftell(fp); fscan(); if(i=='1') strcpy(temp,student1.num); else if(i=='2') strcpy(temp,student1.name); if(a==1&&!strcmp(temp,temp2)&&student1.vs==1) { r=1; print(); break; } else if(a==2&&!strcmp(temp,temp2)&&student1.vs==0) { r=1; print(); break; } else if(a==3&&!strcmp(temp,temp2)&&student1.vs==1) { r=1; print(); } } if(r==0) printf("\n\n查找不到需要的信息"); /* position=ftell(fp); */ fclose(fp); return(r);}void change() /*修改*/{ int i=0,r=0; cleardevice(); clrscr(); printf("\16[{-400|40032,32=11(8)15 更新容}]"); r=find(1); if((fp=fopen(temper,"r+"))==NULL) { printf("无法打开这个文件\n"); exit(0); } if(r!=0) { printf("\n输入您希望更新的容\n1 序号,2 ,3 数学成绩,4 物理成绩,5 化学成绩,6 英语成绩,7 网络成绩,8 所有信息,0 退出?\n输入0到8:"); scanf("%d",&i); if(i==0) choose(); scan(i); rewind(fp); /*复位函数*/ fseek(fp,position,0);/*转到这一行的起始位置*/ fprint(); handline(); print(); } printf("\t\t\t按任意键继续"); getch(); fclose(fp);}void search(){ clrscr(); find(3); getch();}void delete() /*删除*/{ int r=0; char ch; cleardevice(); clrscr(); printf("\16[{-400|40032,32=11(8)15 删除}]"); r=find(1); if((fp=fopen(temper,"r+"))==NULL) { printf("无法打开这个文件\n"); exit(0); } if(r!=0) { printf("请确定是否删除!(输入Y或者N)"); while(1) { scanf("%c",&ch); if(ch!='Y'&&ch!='y'&&ch!='n'&&ch!='N') printf("\n请输入Y或N!:"); else break; } if(ch=='Y'||ch=='y') { student1.vs=0; rewind(fp); /*复位函数*/ fseek(fp,position,0);/*转到这一行的起始位置*/ fprint(); printf("删除成功!"); } else printf("删除取消。

"); } printf("\t\t\t按任意键继续"); getch(); fclose(fp);}void nodelete() /*恢复*//*{ int r=0; char ch; cleardevice(); clrscr(); printf("\16[{-400|40032,32=11(8)15 恢复}]"); if((fp=fopen(temper,"r+"))==NULL) { printf("无法打开这个文件\n"); } else { printf("\n 以下是已经删除的数据:\n"); handline(); while(!feof(fp)) { fscan(); if(student1.vs==0) print(); } } fclose(fp); printf("------------------------------------------------\n"); printf("***************数 据 回 收 站***************\n"); printf("------------------------------------------------\n"); r=find(2); if(r==1) { printf("确定要恢复吗?(输入(Y/N)):"); while(1) { scanf("%c",&ch); if(ch!='Y'&&ch!='y'&&ch!='n'&&ch!='N') printf("\n请输入Y或N!:"); else break; } if(ch=='Y'||ch=='y') { student1.vs=1; rewind(fp); fseek(fp,position,0); fprint(); printf("恢复成功!"); } else printf("操作取消!"); } printf("\t\t\t按任意键继续"); getch(); fclose(fp);}*/{ int r=0; char ch; cleardevice(); clrscr(); printf("\16[{-400|40032,32=11(8)15 恢复}]"); if((fp=fopen(temper,"r+"))==NULL) { printf("无法打开这个文件\n"); } else { printf("\n 以下是已经删除的数据:\n"); handline(); while(!feof(fp)) { fscan(); if(student1.vs==0) print(); } } fclose(fp); printf("------------------------------------------------\n"); printf("***************数 据 回 收 站***************\n"); printf("------------------------------------------------\n"); r=find(2); if((fp=fopen(temper,"r+"))==NULL) { printf("无法打开这个文件\n"); exit(0); } if(r!=0) { printf("确定要恢复吗?(输入(Y/N)):"); while(1) { scanf("%c",&ch); if(ch!='Y'&&ch!='y'&&ch!='n'&&ch!='N') printf("\n请输入Y或N!:"); else break; } if(ch=='Y'||ch=='y') { student1.vs=1; rewind(fp); /*复位函数*/ fseek(fp,position,0);/*转到这一行的起始位置*/ fprint(); printf("恢复成功!"); } else printf("操作取消!"); } printf("\t\t\t按任意键继续"); getch(); fclose(fp);}void addto() /*添加数据*/{ char ch; if((fp=fopen(temper,"a"))==NULL) { printf("无法打开这个文件\n"); exit(0); } while(1) { cleardevice();clrscr(); printf("\16[{-400|40032,32=11(8)15 添加记录}]"); scan(8); fprint(); handline(); print(); printf("继续输入或退出(N或者E)"); getchar(); while(1) { scanf("%c",&ch); if(ch=='N'||ch=='e'||ch=='E'||ch=='n') break; else printf("\n请输入N或者E"); } if(ch=='E'||ch=='e') { break; } } fclose(fp);}void statistics()/*统计功能*/{ total.score1+=student1.score1; total.score2+=student1.score2; total.score3+=student1.scor。

下载提示
相关文档
正为您匹配相似的精品文档