1、C语言程序设计报告 目录学生成绩管理程系题目要求 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. 按学号排序输出全班学生成绩表.二 需求分析根据题目要求,
2、由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.三 总体设计根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块.学生成绩管理系统数据输入数据显示数据修改数据删除数据查找四 详细设计1. 主函数:主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.流程图:显示一系列功能模块 N输入n,判断n是否是A-F Y根据n的值调用各功能模块函数程序:main() while(1) clrscr();print
3、f(*welcome to use student manage*n); printf(*menu*n); printf(* = * n); printf(* Ashuru Bxiugai * n); printf(* Cshanchu Dchazhao * n); printf(*Exianshi Fexit * n); printf(* * n); printf(* - * n); printf( Please input which you want(A-F):); ch=getch(); switch(ch) case A:shuru();break; case B:xiugai();
4、 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 xuehao8; char mingzi20; char nianl
5、ing3;float score6; data,info1000; int i,j,k=0; char temp20,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:);
6、 gets(data.mingzi); printf(please shuru nianling:);gets(data.nianling);printf(Please shuru shuxue score:); gets(temp);data.score0=atof(temp); printf(Please input yingyu score:); gets(temp);data.score1=atof(temp); printf(Please shuru wuli score:); gets(temp);data.score2=atof(temp); data.score3=data.s
7、core0+data.score1+data.score2;fwrite(&data,sizeof(data),1,fp); printf(another?y/n); ch=getch(); if(ch=n|ch=N) break; fclose(fp); 3. 修改模块:分析:用户输入要修改学生的学号,根据学生的学号查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息.流程图:输入要修改的学号找到? Y N提示没有找到显示记录,调用修改函数返回主菜单继续? Y N程序:void xiugai() if(fp=fopen(s_score.txt,rb+)=NULL|(fp
8、1=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:%snmingzi:%snnianling:%sn,data.xuehao,data.mingzi,data.nianling); printf(
9、Please shuru mingzi:); gets(data.mingzi); printf(Please shuru shuxue score:); gets(temp);data.score0=atof(temp); printf(Please input yingyu score:); gets(temp);data.score1=atof(temp); printf(Please input wuli score:); gets(temp);data.score2=atof(temp); data.score3=data.score0+data.score1+data.score2
10、; 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. 删除模块: 分析:该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除.流程图: 输入要删除的学号找到? Y N提示没有找到显示记录,调用删除函数返回主菜单继续? Y N程序:void shanchu
11、() 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); get
12、ch(); 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. 查找模块:需求分析:该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息.流程图:输入学生学号返回主菜单询问是否继续提示没有找到显示找到的记录是否找到学
13、生记录 Y N N Y程序: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:%sn nianling:%sn shuxue:%fn yingyu:%fn wuli:%fn z
14、ongfen:%fn,data.xuehao,data.mingzi,data.nianling,data.score0,data.score1,data.score2,data.score3); 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;
15、i=1000;i+) if(fread(&infoi,sizeof(infoi),1,fp)!=1) /*检查是否出错*/break; /*指针 要读写字节数 要读写size字节的数据项 文件型指针*/ printf(nxuehao mingzi nianling shuxue yingyu wuli zongfenn); for(j=0,k=1;ji;j+,k+) infoj.mingci=k; printf(%6s %8s %3s %3.1f %3.1f %3.1f %3.1f n,infoj.xuehao,infoj.mingzi,infoj.nianling,infoj.score0,
16、infoj.score1,infoj.score2,infoj.score3); 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 /*内存操作函数*/ #includ
17、e ctype.h /*字符操作函数*/ #include alloc.h /*动态地址分配函数*/ struct score /*结构体score*/ int mingci; char xuehao8; char mingzi20; char nianling3;float score6; data,info1000; int i,j,k=0; char temp20,ch; FILE *fp,*fp1; void shuru() if(fp=fopen(s_score.txt,ab+)=NULL) /*以读写方式打开名为s_score的文件*/ printf(cannot open thi
18、s 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.score0=atof(temp); printf(Please input yingyu score
19、:); gets(temp);data.score1=atof(temp); printf(Please shuru wuli score:); gets(temp);data.score2=atof(temp); data.score3=data.score0+data.score1+data.score2;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
20、=fopen(s_score.txt,rb+)=NULL) /*以读写方式打开名为s_score的文件*/ printf(Cannot reading this file.n); /*先检查打开的操作是否出错*/exit(0); for(i=0;i=1000;i+) if(fread(&infoi,sizeof(infoi),1,fp)!=1) /*检查是否出错*/break; /*指针 要读写字节数 要读写size字节的数据项 文件型指针*/ printf(nxuehao mingzi nianling shuxue yingyu wuli zongfenn); for(j=0,k=1;js
21、huru Bxiugai * n); printf(* Cshanchu Dchazhao * n); printf(*Exianshi Fexit * 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; 18
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100