c语言课程设计学生成绩管理系统.docx
- 文档编号:8533014
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:48
- 大小:25.46KB
c语言课程设计学生成绩管理系统.docx
《c语言课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生成绩管理系统.docx(48页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生成绩管理系统
学习-----好资料
——同学成果治理程序
题目要求
···················
2
设计目的
···················
2
总体设计
···················
3
具体设计
···················
3
调试与测试
·················
12
源程序
···················
14
总结
···················
30
更多精品文档
第1页,共30页
学习-----好资料
同学成果治理程序
一.
题目要求
1.
问题描述:
对在校同学几门课程的考试成果进行统一治理
.每个同学记录包括学号
姓名,年龄,数学,英语,物理成果,默认以学号为序存放.
2.
要求:
(1)一个文件按以班为单位储备同学记录
.
(2)将答应的操作分为四种
以A,B,C,D,E,F
为标志:
A:
插入一个同学记录
B:
修改同学记录;C:
删除一个同学记录D:
查找一个同学记录E:
浏览同学成果:
F:
退出
;
;
;
3.
运算同学的总成果.
4.
按学号排序输出全班同学成果表
.
二.
设计目的
依据题目要求,由于同学信息是存放在文件中
所以应供应文件的输入
输出
;另外
等操作;在程序中需要浏览同学的信息
仍应供应键盘式挑选菜单实现功能挑选
应供应显示
.
查找,排序等操作
三.
总体设计
依据上面的需求分析
可以将这个系统分为以下模块
:
输入模块,修改模块,删
除模块,查找模块,显示模块.
更多精品文档
第2页,共30页
学习-----好资料
同学成果治理系统
数据输入
数据显示
数据修改
数据删除
数据查找
四.具体设计
1.主函数:
主函数一般设计得比较简洁
只供应输入
处理和输出部分的函数调用
其中各功能模块用菜单方式挑选
.
流程图:
显示一系列功能模块
N
输入n,判定n是否是A--F
Y
依据n的值调用各功能模块函数
[程序]:
//#include"head.h"intmenu_select()
{
charc;printf("\n\n");
printf("|1.
printf("|2.
printf("|3.
printf("|4.
printf("|0.printf("\n\n");
增加同学记录
查询同学记录修改同学记录同学纪录排序退出系统|\n");
5.
6.
7.
8.
统计信息
打开文件储存文件显示记录
|\n");
|\n");
|\n");
|\n");
printf("
请挑选(0-8):
");
c=getchar();
getchar();return(c-'0');
}
更多精品文档
第3页,共30页
学习-----好资料
2.输入模块:
[分析]:
单独看各数据信息,学号,姓名是字符型,可以采纳字符型数组
;分数为整数,
采纳整数;数据信息存放在文件中
便信息治理.
一条记录对应一个同学
既符合习惯又方
假如要存放如干同学信息就用结构体数组
:
voidaddrecord(studentstud[])
{
inti=0,j,num;charstr[5];if(numstus.=0)
{
printf("
gets(str);
已有记录存在是否掩盖
.(y/n)\n");
if(str[0]=='Y'||str[0]=='y')
i=0;
elsei=numstus;
}
printf("
请输入增加的同学信息条目数
:
");
scanf("%d",&num);
if(i==0)numstus=num;
elsenumstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student*)realloc(pointer,lens*LEN);
}
printf("
请输入同学信息:
\n");
for(;i { getchar(); printf(" 请输入学号: "); gets(pointer[i].number); printf(" 请输入姓名: "); gets(pointer[i].name); printf(" 请输入性别(男/女1/0): "); gets(pointer[i].sex); if(pointer[i].sex[0]=='0')strcpy(pointer[i].sex," 女"); 更多精品文档 第4页,共30页 学习-----好资料 elsestrcpy(pointer[i].sex," 男"); printf(" 请输入各科成果: (按“语文,数学,英语,历史,政治”的次序): "); stud[i].score=0; for(j=0;j { scanf("%f",&stud[i].subject[j]);/*stud[i].score+=stud[i].subject[j]; } stud[i].average=stud[i].score/numsubs;/* } 运算总分*/ 运算平均分 */ count(stud);/* 附名次*/ display(stud,0,numstus-1); getchar(); } intnumstus;intlens; student*pointer;voidmain() { inti=1;charstr[2];lens=100; pointer=(student*)malloc(lens*LEN);/* numstus=0; 安排内存*/ welcome();/* while(i>0) { 欢迎界面*/ i=menu_select();/* switch(i) { 掌握菜单*/ case1: addrecord(pointer);break;/* case2: findrecord(pointer);break;/*case3: amendrecord(pointer);break;/* 增加同学信息*/ 查询同学信息*/ 修改同学信息*/ case4: sort(pointer);break;/* case5: statistic(pointer);break;/*case6: openfile(pointer);break;/* case7: writetotext(pointer);break;/* 同学信息排序*/ 统计信息*/ 打开文件*/ 储存文件*/ case8: display(pointer,0,numstus-1);break;/* case0: 显示记录*/ if(numstus.=0)printf(" gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(pointer); 是否储存当前记录.(y/n)"); i=-1;break;/* 退出系统*/ 更多精品文档 第5页,共30页 学习-----好资料 default: printf(" } } printf("\t\tdisplay1(); } 请输入数字0~8: \n");i=1;/* 输入错误*/ 欢迎再次使用本系统;\n\n"); 3.修改模块: [分析]: 用户输入要修改同学的学号 并提示用户修改该记录的哪部分信息 [流程图]: 依据同学的学号等信息查找同学记录 .依据用户挑选修改相应的信息 . 输入要修改的学号 找到 . Y N 显示记录 调用修改函数 提示没有找 到 Y 连续. N 返回主菜单 [程序]: 更多精品文档 第6页,共30页 学习-----好资料 voidxiugai() { if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) /*检查是否出错*/ { printf("Cannotopenthisfile.\n");exit(0); } printf("\nPLeaseshuruxiugaixuehao: ");scanf("%d",&i);getchar();while((fread(&data,sizeof(data),1,fp))==1) { j=atoi(data.xuehao);if(j==i) { ing); printf("Pleaseshurumingzi: "); gets(data.mingzi); printf("Pleaseshurushuxuescore: ");gets(temp);data.score[0]=atof(temp);printf("Pleaseinputyingyuscore: ");gets(temp);data.score[1]=atof(temp);printf("Pleaseinputwuliscore: ");gets(temp);data.score[2]=atof(temp); data.score[3]=data.score[0]+data.score[1]+data.score[2]; }fwrite(&data,sizeof(data),1,fp1); } 将位置指针移到离头文件 0个字节处 fseek(fp,0L,0);/* fseek(fp1,0L,0); */ while((fread(&data,sizeof(data),1,fp1))==1) { fwrite(&data,sizeof(data),1,fp); } fclose(fp); fclose(fp1); } 更多精品文档 第7页,共30页 学习 -----好资料 4.删除模块: 分析]: 该模块的功能是 [ 用户输入要删除的同学的学号 依据同学学号查找记录并 删除. [流程图]: 输入要删除的学号 找到 . Y N 显示记录 调用删除函数 提示没有找 到 Y 连续. N 返回主菜单 [程序]: voiddeleterecord(studentstu[],inti)/* { intj; 删除信息*/ while(i>=0) { for(j=i;j stu[j]=stu[j+1];numstus--; 删除胜利.\n"); printf(" } 更多精品文档 第8页,共30页 学习-----好资料 } voidcount(studentstud[]) { inti,j;for(i=0;i { stud[i].index=1;for(j=0;j } } 5.查找模块: [需求分析]: 该模块的功能是依据输入的同学的姓名查找对应的记录应的同学信息. [流程图]: 输入同学学 号 找到以后 显示相 是否 到学 找 生 N记录 Y 显示找到的 记录 提示没有找 到 询问 否连续 是 N 返回主菜单 Y 更多精品文档 第9页,共30页 学习-----好资料 [程序]: //#include"head.h" intfindrecord(studentstud[])/* { charstr[2];inti,num; if(numstus==0) { 查找信息*/ printf(" return-1; } else { printf("gets(str); 没有可被查找的记录\n"); 以何种方式查找? \n1.学号\t2. 姓名\t3. 名次\n"); if(str[0]=='1')/* { 按学号查找*/ printf(" gets(str); 请输入学号: "); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].number)==0) { display(stud,i,i);break; } elsecontinue; } elseif(str[0]=='2')/* { 按姓名查找*/ printf(" gets(str); 请输入姓名: "); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].name)==0) { display(stud,i,i);break; } elsecontinue; } elseif(str[0]=='3')/* { 按名次查找*/ printf(" 请输入名次: "); scanf("%d",&num); getchar(); 更多精品文档 第10页,共30页 学习-----好资料 for(i=0;i<=numstus;i++) if(num==stud[i].index) { display(stud,i,i);break; } elsecontinue; } if(i>numstus) { printf(" return-1; } returni; } } 没有查找所要的信息; \n"); 6.显示模块: [需求分析]: 该模块的功能是显示全部同学记录信息 [程序]: . voidwelcome() { printf("\t*********************************************************** **\n"); printf("\t\t\t\t** 用.\n"); 学生成绩管理系统**\n\t\t\t\t 倾情奉献 欢迎使 printf("\t*********************************************************** **\n"); } voidshowtable() { printf("------------------------------------------------------------- --------------------------\n"); 更多精品文档 第11页,共30页 学习----- 好资料 printf(" 均分\t 学号\t姓名\t 名次\n"); 性别\t 语文\t 数学\t 英语\t 历史\t 政治\t 总分\t 平 printf("------------------------------------------------------------- --------------------------\n"); } voiddisplay(studentstud[],intn1,intn2) { inti; showtable();/*for(i=n1;i<=n2;i++) 显示表头*/ printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n" stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].s ubject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index); /*通过循环输出数据*/ } voiddisplay1() { printf("\t\tprintf("\t\tprintf("\t\tprintf("\n\n");getchar(); } 本系统由计科二班制作 制作人员列表: \n\n"); \n\n"); 殷增锋\t\t\t 邵超\n"); 五. 调试与测试 在这次课程设计中,程序编写过程中遇到了许多的问题, 各种函数的运用也让人 头疼,在上机编译运行过程中显现了许多的错误,例如: 各种数据类型的定义, 函数的调用等等;但最终仍是在老师同学的帮忙下进行了各种代码的编写与修改最终程序胜利的运行; 下面是各个模块的界面图 更多精品文档 第12页,共30页 学习 -----好资料 (1) 主菜单函数: 输入模块 : (2): 显示模块 : (3): 删除模块 : (4): 更多精品文档 第13页,共30页 学习 -----好资料 (5): 查找模块: (6): 修改模块: 六.程序源 #ifndefH_STUDENT_HH #defineH_STUDENT_HH #include"stdio.h" #include"string.h" #include"malloc.h" #defineLENsizeof(structmessage_student)/* */ 一个结构体数组元素的长度 #definenumsubs5/* 学科数目*/ typedefstructmessage_student/* { charnumber[6];charname[20];charsex[4]; floatsubject[numsubs];floatscore; floataverage;intindex; }student; 结构体定义*/ 更多精品文档 第14页,共30页 学习-----好资料 externintnumstus;/* externstudent*pointer;/*externintlens; 同学数目*/ 指向结构体数组 */ intmenu_select();/* intopenfile(studentstu[]); 函数声明*/ intfindrecord(studentstud[]); intwritetotext(studentstud[]);voidwelcome(); voiddisplay1(); voidshowtable(); voidsort(studentstu[]); voiddeleterecord(studentstu[],inti);voidaddrecord(studentstud[]); voiddisplay(studentstud[],intn1,intn2);voidamendrecord(studentstud[]); voidcount(studentstud[]); voidsortnum(studentstud[]);voidsortnum2(studentstud[]);voidsortname(studentstud[]);voidsortname2(studentstud[]);voidsortcount(studentstud[]);voidsortcount2(studentstud[]);voidstatistic(studentstud[]); voiddisplay1(); #endif //#include"head.h" intmenu_select() { charc;printf("\n\n"); printf("|1. printf("|2. printf("|3. printf("|4. printf("|0.printf("\n\n"); 增加同学记录 查询同学记录修改同学记录同学纪录排序退出系统|\n"); 5. 6. 7. 8. 统计信息 打开文件储存文件显示记录 |\n"); |\n"); |\n"); |\n"); printf(" 请挑选(0-8): "); 更多精品文档 第15页,共30页 学习-----好资料 c=getchar(); getchar();return(c-'0'); } //#include"head.h" intfindrecord(studentstud[])/* { charstr[2];inti,num; if(numstus==0) { 查找信息*/ printf(" return-1; } else { printf("gets(str); 没有可被查找的记录 \n"); 以何种方式查找? \n1.学号\t2. 姓名\t3. 名次\n"); if(str[0]=='1')/* { 按学号查找*/ printf(" gets(str); 请输入学号: "); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].number)==0) { display(stud,i,i);break; } elsecontinue; } elseif(str[0]=='2')/* { 按姓名查找*/ printf(" gets(str); 请输入姓名: "); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].name)==0) { display(stud,i,i);break; } elsecontinue; } elseif(str[0]=='3')/* 按名次查找*/ 更多精品文档 第16页,共30页 学习-----好资料 { printf(" 请输入名次: "); scanf("%d",&num); getchar();for(i=0;i<=numstus;i++)if(num==stud[i].index) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 成绩管理系统