C语言实习:学生成绩管理系统
更新时间:2023-06-01 03:20:01 阅读量: 实用文档 文档下载
- c语言学生成绩管理程序推荐度:
- 相关推荐
C语言程序设计报告
班 号 : 054073 姓 名 :曹震
学 号 : 20071001865
中国地质大学工程学院
2008年12月~2009年1月
目录
———学生成绩管理程系
题目要求 ·············· 3
需求分析
总体设计
详细设计
上机操作
源程序
总结 ·············· ·············· ·············· ·············· ·············· ·············· 3 4 4 11 13 19
学生成绩管理程序
一. 题目要求
1. 问题描述:
对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放. 2. 要求:
(1):一个文件按以班为单位存储学生记录.
(2)将允许的操作分为四种,以A,B ,C,D,E,F为标志: A:插入一个学生记录; B:修改学生记录; C:删除一个学生记录; D:查找一个学生记录; E:浏览学生成绩: F:退出
3. 计算学生的总成绩.
4. 按学号排序输出全班学生成绩表.
二. 需求分析
根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.
三. 总体设计
根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块.
四. 详细设计
1. 主函数:
主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.
流程图:
[程序]: main() {
while(1) {
clrscr();
printf("*************welcome to use student manage******************\n"); printf("*************************menu********************************\n"); printf("* ========================================================= * \n"); printf("* A>shuru B>xiugai * \n");
printf("* C>shanchu D>chazhao * \n"); printf("*E>xianshi F>exit * \n"); printf("* * \n");
printf("* --------------------------------------------------------- * \n"); printf(" Please input which you want(A-F):"); ch=getch(); switch(ch) {
case 'A':shuru();break; case 'B':xiugai(); break; case 'C':shanchu(); break; case 'D':chazhao(); break; case 'E':xianshi(); break; case 'F':exit(0); default: continue; } } }
2. 输入模块: [分析]:
单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.
如果要存放若干学生信息就用结构体数组:
struct score /*结构体score*/ {
int mingci; char xuehao[8]; char mingzi[20]; char nianling[3]; float score[6]; }data,info[1000]; int i,j,k=0;
char temp[20],ch; FILE *fp,*fp1; [程序]:
void shuru() {
if((fp=fopen("s_score.txt","ab+"))==NULL) /*以读写方式打开名为s_score的文件*/ {
printf("cannot open this file.\n"); getch();exit(0); }
for(i=0;i<=1000;i++) {
printf("\nPlease shuru xuehao:"); gets(data.xuehao);
printf("Please shuru mingzi:"); gets(data.mingzi);
printf("please shuru nianling:"); gets(data.nianling);
printf("Please shuru shuxue score:"); gets(temp);data.score[0]=atof(temp); printf("Please input yingyu score:"); gets(temp);data.score[1]=atof(temp); printf("Please shuru wuli score:"); gets(temp);data.score[2]=atof(temp);
data.score[3]=data.score[0]+data.score[1]+data.score[2]; fwrite(&data,sizeof(data),1,fp); printf("another?y/n"); ch=getch();
if(ch=='n'||ch=='N') break;
} fclose(fp); }
3. 修改模块:
[分析]:用户输入要修改学生的学号,根据学生的学号查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息. [流程图]:
Y N
[程序]:
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) /*检查是否出错*/ {
printf("Cannot open this file.\n"); exit(0); }
printf("\nPLease shuru xiugai xuehao:"); scanf("%d",&i); getchar();
while((fread(&data,sizeof(data),1,fp))==1) {
j=atoi(data.xuehao); if(j==i) {
printf("xuehao:%s\nmingzi:%s\nnianling:%s\n",data.xuehao,data.mingzi,data.nianling);
printf("Please shuru mingzi:"); gets(data.mingzi);
printf("Please shuru shuxue score:"); gets(temp);data.score[0]=atof(temp); printf("Please input yingyu score:"); gets(temp);data.score[1]=atof(temp); printf("Please input wuli score:"); 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); }
fseek(fp,0L,0); /*将位置指针移到离头文件0个字节处*/ fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1) {
fwrite(&data,sizeof(data),1,fp); }
fclose(fp); fclose(fp1); }
4. 删除模块: [分析]:
该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除. [流程图]:
[程序]:
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) {
printf("\nopen score.txt was failed!"); getch(); exit(0); }
printf("\nPlease input ID which you want to del:"); scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1) {
j=atoi(data.xuehao); if(j==i) {
printf("Anykey will delet it.\n"); getch(); continue; }
fwrite(&data,sizeof(data),1,fp1); }
fclose(fp); fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Data delet was succesful!\n"); printf("Anykey will return to main."); getch(); }
5. 查找模块:
[需求分析]:
该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息. [流程图]:
[void chazhao() {
if((fp=fopen("s_score.txt","rb"))==NULL) {
printf("\nCannot open this file.\n"); exit(0); }
printf("\nPLease shuru xuehao chakan:"); scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1) {
j=atoi(data.xuehao); if(i==j) {
printf("xuehao:%s mingzi:%s\n nianling:%s\n shuxue:%f\n yingyu:%f\n wuli:%f\n zongfen:%f\n",data.xuehao,data.mingzi,data.nianling,data.score[0],data.score[1],data.score[2],data.score[3]);
}getch(); } }
6. 显示模块:
[需求分析]:
该模块的功能是显示所有学生记录信息. [程序]:
void xianshi() {
float s;int n;
if((fp=fopen("s_score.txt","rb+"))==NULL) /*以读写方式打开名为s_score的文件*/ {
printf("Cannot reading this file.\n"); /*先检查打开的操作是否出错*/ exit(0); }
for(i=0;i<=1000;i++) {
if((fread(&info[i],sizeof(info[i]),1,fp))!=1) /*检查是否出错*/
break; /*指针 要读写字节数 要读写size字节的数据项 文件型指针*/ }
printf("\nxuehao mingzi nianling shuxue yingyu wuli zongfen\n"); for(j=0,k=1;j<i;j++,k++) {
info[j].mingci=k; printf("%6s %8s %3s %3.1f %3.1f %3.1f %3.1f \n",info[j].xuehao,info[j].mingzi,info[j].nianling,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3]); }
getch(); fclose(fp); }
五. 上机操作
下面是各个模块的界面图:
(1): 主菜单函数
:
(2): 输入模块:
(3): 显示模块:(包含了按学号排序功能
)
(4): 删除模块:
(5): 查找模块:
(6): 修改模块
:
六. 源程序
#include "stdio.h" /*I/O函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "mem.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/ #include "alloc.h" /*动态地址分配函数*/
struct score /*结构体score*/ {
int mingci; char xuehao[8];
char mingzi[20]; char nianling[3]; float score[6]; }data,info[1000]; int i,j,k=0;
char temp[20],ch; FILE *fp,*fp1;
void shuru() {
if((fp=fopen("s_score.txt","ab+"))==NULL) /*以读写方式打开名为s_score的文件*/ {
printf("cannot open this file.\n"); getch();exit(0); }
for(i=0;i<=1000;i++) {
printf("\nPlease shuru xuehao:"); gets(data.xuehao);
printf("Please shuru mingzi:"); gets(data.mingzi);
printf("please shuru nianling:"); gets(data.nianling);
printf("Please shuru shuxue score:"); gets(temp);data.score[0]=atof(temp); printf("Please input yingyu score:"); gets(temp);data.score[1]=atof(temp); printf("Please shuru wuli score:"); gets(temp);data.score[2]=atof(temp);
data.score[3]=data.score[0]+data.score[1]+data.score[2]; fwrite(&data,sizeof(data),1,fp); printf("another?y/n"); ch=getch();
if(ch=='n'||ch=='N') break;
} fclose(fp); /*读文件结束*/ }
void xianshi() {
float s;int n;
if((fp=fopen("s_score.txt","rb+"))==NULL) /*以读写方式打开名为s_score的文件*/ {
printf("Cannot reading this file.\n"); /*先检查打开的操作是否出错*/
exit(0); }
for(i=0;i<=1000;i++) {
if((fread(&info[i],sizeof(info[i]),1,fp))!=1) /*检查是否出错*/
break; /*指针 要读写字节数 要读写size字节的数据项 文件型指针*/ }
printf("\nxuehao mingzi nianling shuxue yingyu wuli zongfen\n"); for(j=0,k=1;j<i;j++,k++) {
info[j].mingci=k; printf("%6s %8s %3s %3.1f %3.1f %3.1f %3.1f \n",info[j].xuehao,info[j].mingzi,info[j].nianling,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3]); }
getch(); fclose(fp); }
void xiugai() {
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) /*检查是否出错*/ {
printf("Cannot open this file.\n"); exit(0); }
printf("\nPLease shuru xiugai xuehao:"); scanf("%d",&i); getchar();
while((fread(&data,sizeof(data),1,fp))==1) {
j=atoi(data.xuehao); if(j==i) {
printf("xuehao:%s\nmingzi:%s\nnianling:%s\n",data.xuehao,data.mingzi,data.nianling);
printf("Please shuru mingzi:"); gets(data.mingzi);
printf("Please shuru shuxue score:"); gets(temp);data.score[0]=atof(temp); printf("Please input yingyu score:"); gets(temp);data.score[1]=atof(temp); printf("Please input wuli score:");
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); }
fseek(fp,0L,0); /*将位置指针移到离头文件0个字节处*/ fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1) {
fwrite(&data,sizeof(data),1,fp); }
fclose(fp); fclose(fp1); }
void chazhao() {
if((fp=fopen("s_score.txt","rb"))==NULL) {
printf("\nCannot open this file.\n"); exit(0); }
printf("\nPLease shuru xuehao chakan:"); scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1) {
j=atoi(data.xuehao); if(i==j) {
printf("xuehao:%s mingzi:%s\n nianling:%s\n shuxue:%f\n yingyu:%f\n wuli:%f\n zongfen:%f\n",data.xuehao,data.mingzi,data.nianling,data.score[0],data.score[1],data.score[2],data.score[3]); }getch(); } }
void shanchu() {
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) {
printf("\nopen score.txt was failed!"); getch(); exit(0);
}
printf("\nPlease input ID which you want to del:"); scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1) {
j=atoi(data.xuehao); if(j==i) {
printf("Anykey will delet it.\n"); getch(); continue; }
fwrite(&data,sizeof(data),1,fp1); }
fclose(fp); fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Data delet was succesful!\n"); printf("Anykey will return to main."); getch(); }
main() {
while(1) {
clrscr();
printf("*************welcome to use student manage******************\n"); printf("*************************menu********************************\n"); printf("* ========================================================= * \n"); printf("* A>shuru B>xiugai * \n"); printf("* C>shanchu D>chazhao * \n"); printf("*E>xianshi F>exit * \n"); printf("* * \n");
printf("* --------------------------------------------------------- * \n"); printf(" Please input which you want(A-F):"); ch=getch(); switch(ch) {
case 'A':shuru();break; case 'B':xiugai(); break; case 'C':shanchu(); break;
case 'D':chazhao(); break; case 'E':xianshi(); break; case 'F':exit(0); default: continue; } } } ···············································································
七.
总结:
因为虽然之前对C语言进行过一定的学习,但 本次C语言课程设计对我来说是一个挑战。
开始接触的无非是变量,函数,条件语句。循环语句等基本概念,要真正能进行编程应用,需要在在深入理解这些概念的基础上应用,不要只简单地学习语法,结构,而要吃透针对这些语法结构的应用例子,做到触类旁通。
此次C语言课程设计,虽说不上一波三折,但过程绝不轻松。VC++课以过去好长一段时间了,前面的知识会遗忘,这对课程设计的开展无疑是一个阻碍。刚开始,上机做小题目感觉还好,可到了真的要自己设计大程系的时候就觉得非常吃力,前面两天基本什么都没做,狂看书啊,找资料,希望能学到些什么,感觉才好一点,这才开始进行设计。都说万事开头难,虽然头是开了,但后面的工作远没有想象中的简单和顺利。因为从来没有接触过这方面的东西,做起来肯定会有一点吃力,很多次都没有勇气继续下去了,自己都对自己没有信心了,一个模块要编好长时间,而且运行起来还是错误百出,急也急死人,幸好在同学和朋友的鼓励之下坚持了下来,好多地方不清楚的,就问一下学计算机的朋友,或者问老师,然后回去自己再进行思考,揣摩,尽量把它消化吸收,变成自己的东西,因为既然付出了时间和努力,就要学到一些东西,不虚度光阴才好。
经过无数次地上机操作,修改,运行以及调节器试,这个C语言课程设计终于渐渐有了眉目,在经过最后几天的冲刺,终于在考核前一天大功告成,测试和运行都比较成功,内心的喜悦之情无法言表,一想到经过了这么几天的艰苦努力,真的做出了属于自己的课程设计,就十分开心,辛苦努力没有白费,付出总算有了小小的回报。
通过此次C语言课程设计,温习了旧的知识,同学又学到了新的东西,比如文件和结构体方面的内容,还学会了一些简单的数据结构和算法,同时也熟练了上机操作,真可谓是收获匪浅!
这次C语言课程设计最大的感受就是:只要真的努力了,没有什么是做不到的.前面的道路曲折而漫长,但我们会走得更远!
我有一种喜悦的成就感!呵呵!谢谢老师同学们
过年回家了!在这里祝老师
☆ ⊙
正在阅读:
C语言实习:学生成绩管理系统06-01
上环证明02-07
国际金融复习最终版,修改了答案的12-20
网店加盟、实体加盟合同规范。06-01
我家门口的一条小溪作文300字07-08
作业3.2.406-05
感恩老师高中优秀作文04-01
多重耐药菌医院感染防控措施 - 图文04-14
2013级临床基础化学模拟试题 仅供参考03-15
说明书06-25
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 管理系统
- 实习
- 成绩
- 语言
- 学生
- 公共管理学案例分析题参考答案
- 细绒棉国家标准(征求意见稿)
- 八年级物理下册《电功率》教学设计
- 《小窗口 大世界》教学案例
- 全国计算机等级考试二级VF历年笔试题(2005.4-2010.9)
- 裕兴新概念第三册第31课笔记
- 论企业轮岗期基层员工参与的顺利实现
- 1336 PLUS II 变频器故障说明
- 新课标高中数学人教A版必修四全册教案3.1.2角和与差的正弦、余弦、正切公式(二)
- 中国古代二十四孝
- 石文软件更新功能简介4.2
- 现代材料测试技术作业
- 桥梁桩基首件制人工挖孔桩施工技术方案
- 怎样设计吸引学生兴趣的数学习题
- 2009年会计从业资格考试《财经法规与职业道德》测试题一
- 利用改性柑橘果胶抑制肿瘤转移和缓解重金属毒性
- 法语2修订本答案9
- 帽子、头饰的设计与制作
- 0基于ARM的多对象远程抄表系统集中器的设计与实现
- 感受态大肠杆菌制备方法