c语言课程设计学生成绩管理系统文档格式.docx
《c语言课程设计学生成绩管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生成绩管理系统文档格式.docx(48页珍藏版)》请在冰豆网上搜索。
,所以应供应文件的输入
输出
另外
等操作;
在程序中需要浏览同学的信息
仍应供应键盘式挑选菜单实现功能挑选
应供应显示
查找,排序等操作
三.
依据上面的需求分析
可以将这个系统分为以下模块
:
输入模块,修改模块,删
除模块,查找模块,显示模块.
第2页,共30页
同学成果治理系统
数据输入
数据显示
数据修改
数据删除
数据查找
四.具体设计
1.主函数:
主函数一般设计得比较简洁
只供应输入
处理和输出部分的函数调用
其中各功能模块用菜单方式挑选
流程图:
显示一系列功能模块
N
输入n,判定n是否是A--F
Y
依据n的值调用各功能模块函数
[程序]:
//#include"
head.h"
intmenu_select()
{
charc;
printf("
\n\n"
);
printf("
|1.
|2.
|3.
|4.
|0.printf("
增加同学记录
查询同学记录修改同学记录同学纪录排序退出系统|\n"
5.
6.
7.
8.
统计信息
打开文件储存文件显示记录
|\n"
请挑选(0-8):
"
c=getchar();
getchar();
return(c-'
0'
}
第3页,共30页
2.输入模块:
[分析]:
单独看各数据信息,学号,姓名是字符型,可以采纳字符型数组
分数为整数,
采纳整数;
数据信息存放在文件中
便信息治理.
一条记录对应一个同学
既符合习惯又方
假如要存放如干同学信息就用结构体数组
voidaddrecord(studentstud[])
inti=0,j,num;
charstr[5];
if(numstus.=0)
gets(str);
已有记录存在是否掩盖
.(y/n)\n"
if(str[0]=='
Y'
||str[0]=='
y'
)
i=0;
elsei=numstus;
请输入增加的同学信息条目数
scanf("
%d"
&
num);
if(i==0)numstus=num;
elsenumstus+=num;
if(numstus>
lens)
lens+=50;
pointer=(student*)realloc(pointer,lens*LEN);
请输入同学信息:
\n"
for(;
i<
numstus;
i++)
请输入学号:
gets(pointer[i].number);
请输入姓名:
gets(pointer[i].name);
请输入性别(男/女1/0):
gets(pointer[i].sex);
if(pointer[i].sex[0]=='
)strcpy(pointer[i].sex,"
女"
第4页,共30页
elsestrcpy(pointer[i].sex,"
男"
请输入各科成果:
(按“语文,数学,英语,历史,政治”的次序):
stud[i].score=0;
for(j=0;
j<
numsubs;
j++)
%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);
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);
/*case3:
amendrecord(pointer);
增加同学信息*/
查询同学信息*/
修改同学信息*/
case4:
sort(pointer);
case5:
statistic(pointer);
/*case6:
openfile(pointer);
case7:
writetotext(pointer);
同学信息排序*/
统计信息*/
打开文件*/
储存文件*/
case8:
display(pointer,0,numstus-1);
case0:
显示记录*/
if(numstus.=0)printf("
if(str[0]=='
)writetotext(pointer);
是否储存当前记录.(y/n)"
i=-1;
退出系统*/
第5页,共30页
default:
\t\tdisplay1();
请输入数字0~8:
i=1;
输入错误*/
欢迎再次使用本系统;
\n\n"
3.修改模块:
用户输入要修改同学的学号
并提示用户修改该记录的哪部分信息
[流程图]:
依据同学的学号等信息查找同学记录
.依据用户挑选修改相应的信息
输入要修改的学号
找到
显示记录
调用修改函数
提示没有找
到
连续.
返回主菜单
第6页,共30页
voidxiugai()
if((fp=fopen("
s_score.txt"
"
rb+"
))==NULL||(fp1=fopen("
temp.txt"
wb+"
))==NULL)
/*检查是否出错*/
Cannotopenthisfile.\n"
exit(0);
\nPLeaseshuruxiugaixuehao:
scanf("
i);
getchar();
while((fread(&
data,sizeof(data),1,fp))==1)
j=atoi(data.xuehao);
if(j==i)
ing);
Pleaseshurumingzi:
gets(data.mingzi);
Pleaseshurushuxuescore:
gets(temp);
data.score[0]=atof(temp);
Pleaseinputyingyuscore:
data.score[1]=atof(temp);
Pleaseinputwuliscore:
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.删除模块:
分析]:
该模块的功能是
[
用户输入要删除的同学的学号
依据同学学号查找记录并
删除.
输入要删除的学号
调用删除函数
voiddeleterecord(studentstu[],inti)/*
intj;
删除信息*/
=0)
for(j=i;
stu[j]=stu[j+1];
numstus--;
删除胜利.\n"
第8页,共30页
voidcount(studentstud[])
inti,j;
for(i=0;
stud[i].index=1;
for(j=0;
j++)if(stud[j].score>
stud[i].score)stud[i].index++;
5.查找模块:
[需求分析]:
该模块的功能是依据输入的同学的姓名查找对应的记录应的同学信息.
输入同学学
号
找到以后
显示相
是否
到学
找
生
N记录
显示找到的
记录
询问
否连续
是
第9页,共30页
intfindrecord(studentstud[])/*
charstr[2];
inti,num;
if(numstus==0)
查找信息*/
return-1;
else
gets(str);
没有可被查找的记录\n"
以何种方式查找?
\n1.学号\t2.
姓名\t3.
名次\n"
1'
)/*
按学号查找*/
for(i=0;
=numstus;
if(strcmp(str,stud[i].number)==0)
display(stud,i,i);
break;
elsecontinue;
elseif(str[0]=='
2'
按姓名查找*/
if(strcmp(str,stud[i].name)==0)
3'
按名次查找*/
请输入名次:
第10页,共30页
if(num==stud[i].index)
if(i>
numstus)
returni;
没有查找所要的信息;
6.显示模块:
该模块的功能是显示全部同学记录信息
voidwelcome()
\t***********************************************************
**\n"
\t\t\t\t**
用.\n"
学生成绩管理系统**\n\t\t\t\t
倾情奉献
欢迎使
voidshowtable()
-------------------------------------------------------------
--------------------------\n"
第11页,共30页
学习-----
好资料
均分\t
学号\t姓名\t
名次\n"
性别\t
语文\t
数学\t
英语\t
历史\t
政治\t
总分\t
平
voiddisplay(studentstud[],intn1,intn2)
inti;
showtable();
/*for(i=n1;
=n2;
显示表头*/
%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()
\t\tprintf("
本系统由计科二班制作
制作人员列表:
殷增锋\t\t\t
邵超\n"
五.
在这次课程设计中,程序编写过程中遇到了许多的问题,
各种函数的运用也让人
头疼,在上机编译运行过程中显现了许多的错误,例如:
各种数据类型的定义,
函数的调用等等;
但最终仍是在老师同学的帮忙下进行了各种代码的编写与修改最终程序胜利的运行;
下面是各个模块的界面图
第12页,共30页
(1)
主菜单函数:
输入模块
:
(2):
显示模块
(3):
删除模块
(4):
第13页,共30页
(5):
查找模块:
(6):
修改模块:
六.程序源
#ifndefH_STUDENT_HH
#defineH_STUDENT_HH
#include"
stdio.h"
string.h"
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[]);
#endif
intmenu_select()
第15页,共30页
没有可被查找的记录
第16页,共30页
i++)if(num==stud[i].index)