C语言实习学生成绩管理系统.docx
- 文档编号:30586139
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:26
- 大小:208.80KB
C语言实习学生成绩管理系统.docx
《C语言实习学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言实习学生成绩管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
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.主函数:
主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.
流程图:
显示一系列功能模块
N
输入n,判断n是否是A--F
Y
根据n的值调用各功能模块函数
[程序]:
main()
{
while
(1)
{
clrscr();
printf("*************welcometousestudentmanage******************\n");
printf("*************************menu********************************\n");
printf("*=========================================================*\n");
printf("*A>shuruB>xiugai*\n");
printf("*C>shanchuD>chazhao*\n");
printf("*E>xianshiF>exit*\n");
printf("**\n");
printf("*---------------------------------------------------------*\n");
printf("Pleaseinputwhichyouwant(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.输入模块:
[分析]:
单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.
如果要存放若干学生信息就用结构体数组:
structscore/*结构体score*/
{
intmingci;
charxuehao[8];
charmingzi[20];
charnianling[3];
floatscore[6];
}data,info[1000];
inti,j,k=0;
chartemp[20],ch;
FILE*fp,*fp1;
[程序]:
voidshuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)/*以读写方式打开名为s_score的文件*/
{
printf("cannotopenthisfile.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPleaseshuruxuehao:
");
gets(data.xuehao);
printf("Pleaseshurumingzi:
");
gets(data.mingzi);
printf("pleaseshurunianling:
");
gets(data.nianling);
printf("Pleaseshurushuxuescore:
");
gets(temp);data.score[0]=atof(temp);
printf("Pleaseinputyingyuscore:
");
gets(temp);data.score[1]=atof(temp);
printf("Pleaseshuruwuliscore:
");
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.修改模块:
[分析]:
用户输入要修改学生的学号,根据学生的学号查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息.
[流程图]:
输入要修改的学号
YN
Y
N
[程序]:
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)
{
printf("xuehao:
%s\nmingzi:
%s\nnianling:
%s\n",data.xuehao,data.mingzi,data.nianling);
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);
}
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.删除模块:
[分析]:
该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除.
[流程图]:
输入要删除的学号
YN
Y
N
[程序]:
voidshanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopenscore.txtwasfailed!
");
getch();
exit(0);
}
printf("\nPleaseinputIDwhichyouwanttodel:
");
scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("Anykeywilldeletit.\n");
getch();
continue;
}
fwrite(&data,sizeof(data),1,fp1);
}
fclose(fp);
fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Datadeletwassuccesful!
\n");
printf("Anykeywillreturntomain.");
getch();
}
5.查找模块:
[需求分析]:
该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息.
[流程图]:
输入学生学号
是否找到学生记录
显示找到的记录
提示没有找到
询问是否继续
返回主菜单
YN
N
Y
[程序]:
voidchazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannotopenthisfile.\n");
exit(0);
}
printf("\nPLeaseshuruxuehaochakan:
");
scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao);
if(i==j)
{
printf("xuehao:
%smingzi:
%s\nnianling:
%s\nshuxue:
%f\nyingyu:
%f\nwuli:
%f\nzongfen:
%f\n",data.xuehao,data.mingzi,data.nianling,data.score[0],data.score[1],data.score[2],data.score[3]);
}getch();
}
}
6.显示模块:
[需求分析]:
该模块的功能是显示所有学生记录信息.
[程序]:
voidxianshi()
{
floats;intn;
if((fp=fopen("s_score.txt","rb+"))==NULL)/*以读写方式打开名为s_score的文件*/
{
printf("Cannotreadingthisfile.\n");/*先检查打开的操作是否出错*/
exit(0);
}
for(i=0;i<=1000;i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!
=1)/*检查是否出错*/
break;/*指针要读写字节数要读写size字节的数据项文件型指针*/
}
printf("\nxuehaomingzinianlingshuxueyingyuwulizongfen\n");
for(j=0,k=1;j
{
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"/*动态地址分配函数*/
structscore/*结构体score*/
{
intmingci;
charxuehao[8];
charmingzi[20];
charnianling[3];
floatscore[6];
}data,info[1000];
inti,j,k=0;
chartemp[20],ch;
FILE*fp,*fp1;
voidshuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)/*以读写方式打开名为s_score的文件*/
{
printf("cannotopenthisfile.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPleaseshuruxuehao:
");
gets(data.xuehao);
printf("Pleaseshurumingzi:
");
gets(data.mingzi);
printf("pleaseshurunianling:
");
gets(data.nianling);
printf("Pleaseshurushuxuescore:
");
gets(temp);data.score[0]=atof(temp);
printf("Pleaseinputyingyuscore:
");
gets(temp);data.score[1]=atof(temp);
printf("Pleaseshuruwuliscore:
");
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);/*读文件结束*/
}
voidxianshi()
{
floats;intn;
if((fp=fopen("s_score.txt","rb+"))==NULL)/*以读写方式打开名为s_score的文件*/
{
printf("Cannotreadingthisfile.\n");/*先检查打开的操作是否出错*/
exit(0);
}
for(i=0;i<=1000;i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!
=1)/*检查是否出错*/
break;/*指针要读写字节数要读写size字节的数据项文件型指针*/
}
printf("\nxuehaomingzinianlingshuxueyingyuwulizongfen\n");
for(j=0,k=1;j
{
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);
}
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)
{
printf("xuehao:
%s\nmingzi:
%s\nnianling:
%s\n",data.xuehao,data.mingzi,data.nianling);
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);
}
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);
}
voidchazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannotopenthisfile.\n");
exit(0);
}
printf("\nPLeaseshuruxuehaochakan:
");
scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao);
if(i==j)
{
printf("xuehao:
%smingzi:
%s\nnianling:
%s\nshuxue:
%f\nyingyu:
%f\nwuli:
%f\nzongfen:
%f\n",data.xuehao,data.mingzi,data.nianling,data.score[0],data.score[1],data.score[2],data.score[3]);
}getch();
}
}
voidshanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopenscore.txtwasfailed!
");
getch();
exit(0);
}
printf("\nPleaseinputIDwhichyouwanttodel:
");
scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("Anykeywilldeletit.\n");
getch();
continue;
}
fwrite(&data,sizeof(data),1,fp1);
}
fclose(fp);
fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Datadeletwassuccesful!
\n");
printf("Anykeywillreturntomain.");
getch();
}
main()
{
while
(1)
{
clrscr();
printf("*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实习 学生 成绩管理系统
![提示](https://static.bdocx.com/images/bang_tan.gif)