程序设计实验报告Word文档下载推荐.docx
- 文档编号:13322812
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:12
- 大小:672.71KB
程序设计实验报告Word文档下载推荐.docx
《程序设计实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《程序设计实验报告Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
3、系统设计(算法分析)
1、学生成绩管理系统的数据结构
(1)学号(系统随机生成)
(2)姓名
(3)性别
(4)计算机成绩
(5)数学成绩
(6)英语成绩
(7)平均值
系统功能描述及分析
程序运行以后就会显示菜单界面:
1、输入学生信息,2、浏览学生信息,3、按姓名查找学生信息,4、按指定学科统计学生成绩,5、按成绩排序,6、删除学生信息,7、插入学生信息,8、修改学生信息,0、退出。
(1)输入学生信息:
进入主菜单,选择输入功能所对应的数字,顺次依照提示录入一个学生姓名、年龄、性别、数学成绩、英语成绩、计算机成绩。
该学生的信息输入完毕后,会提示是否继续输入下一个学生的信息,同时提示返回主菜单。
(2)浏览学生信息:
进入主菜单,选择浏览功能所对应的数字,则整体学生信息输出,浏览完毕后,按照提示,按任意键返回主菜单。
(3)按姓名查找学生信息:
进入主菜单,选择查找功能所对应的数字,按照提示输入需要查询的学生姓名,采用for语句将改姓名与系统中已存储的姓名进行循环比较,若相同则输出该学生的位置与其个人信息,回车以后显示相应的学生信息,完毕后,按照提示,按任意键返回主菜单。
(4)按指定学科统计学生成绩:
进入主菜单,选择统计功能所对应的数字,在子菜单中选择需要统计的科目,再在子菜单选择统计的项目,
(1)平均值,采用for语句将所有学生的这门课的分数相加,再除以人数num,得到结果,
(2)最大最小值,先将第一个学生的成绩赋给min或是max,再采用for语句和if语句将以后的学生成绩进行比较,(3)及格率和各分数段人数比率,采用for语句num进行计数。
回车后显示相应信息,结束后,按照提示,按任意键返回。
(5)按成绩排序:
进入主菜单,选择排序功能所对应的数字,跳出子菜单,再根据需要输入数字选择按平均值或是哪门学科成绩进行排序,排序时采用冒泡法,定义一个中间变量进行交换,回车后输出排序后的结果,完毕后根据提示,按任意键结束后选择0返回主菜单。
(6)删除学生信息:
进入主菜单,选择排序功能所对应的数字,根据学生姓名进行删除删除需要删除的学生姓名,删除时,采用for语句,将改姓名与存储的姓名进行比较,定义一个变量保存其下标的值,将后一个的值赋给它,以此类推,回车后输出删除后的整体学生信息,按照提示按任意键结束返回主菜单,如果所输入的学生姓名不存在系统提示输入错误。
(7)插入学生信息:
进入主菜单,选择插入功能所对应的数字,按照提示依次输入需要插入的学生信息,以及插入的位置,回车后输出插入后的整体学生信息,按照提示按任意键结束返回主菜单。
(8)修改学生信息:
进入主菜单,选择修改功能所对应的数字,根据学生姓名进行修改,选择需要修改的学生姓名,回车后,跳出子菜单,根据需要选择需要修改的项目所对应的数字,回车后根据提示输入修改后的相应信息,返回子菜单如不需要修改选择0推出,退出后输出修改后的学生整体信息,按任意键结束,返回主菜单。
(9)退出:
根据菜单界面的提示,输入对应的数字“0”,则结束整个程序。
main()函数的流程图
进入学生管理系统主菜单,按照提示进行选择,采用do-while语句若输入为字母或小于0的数字,主菜单中采用do-while语句将菜单进行循环,菜单采用switch-case语句进行选择。
2、流程图
(1)主菜单功能模块图
(2)统计功能模块图
(3)排序功能模块图
(4)修改功能模块图
3、各函数的功能和实现
学生成绩管理的相关功能由对应的函数来实现。
1)学生注册登记
FILE*fp;
charfilename[20]="
stu"
;
if((fp=fopen(filename,"
ab+"
))==NULL)
{
printf("
\t无法打开文件!
\n"
);
system("
pause"
return;
}
for(i=0;
i<
n;
i++)
{
if(fwrite(&
stu[i],sizeof(structstudent),1,fp)!
=1);
}
fclose(fp);
进入主
菜单,选择输入功能所对应的数字,就可以进入输入函数、删除函数和修改函数,执行相应的程序与功能,完毕后,系统会执行成save函数,当文件存在时,就会逐条信息的写入文件,当文件不存在时,就会提示文件不存在,同时会退出程序。
2)插入学生成绩
charu()函数
重要代码:
for(j=n+1;
j>
i-1;
j--)
stu[j]=stu[j-1];
strcpy(stu[i-1].name,na);
strcpy(stu[i-1].number,xuehao);
stu[i-1].xingbie=sex;
stu[i-1].computer=computer1;
stu[i-1].math=math1;
stu[i-1].english=english1;
stu[i-1].p=(computer1+math1+english1)/3;
进入主菜单,选择数字7,就可以进入相应的函数,输入该学生的相应信息及插入的位置i,,将下标为i-1的元素的值覆盖下一个元素的值,利用一重循环以此用数组前一个元素的值覆盖后一个元素的值,,将插入的学生信息赋给下标为i-1的元素,同时人数n++。
3)删除学生成绩
shc()函数
for(j=0;
j<
j++)
if(strcmp(stu[j].name,xingm)==0)
{i=j;
flag=1;
break;
if(j>
=n)
flag=0;
if(flag==1)
{for(j=i;
stu[j]=stu[j+1];
进入主菜单,选择数字6,进入删除模块。
首先输入要删除学生的姓名,定义int
flag=0;
利用顺序查找算法,采用for语句,将该姓名与存储在结构体数组中的学生姓名进行一一比较,比较相等时即查找成功。
第二步,查找成功后flag=1;
定义一个变量j保存找到的数组元素下标,if(flag==1)利用一重循环以此用数组后一个元素的值覆盖前一个元素的值,例如stu[j]=stu[j+1];
。
完成后结构体数组中人数减1(n--),同时输出删除后的整体学生信息,按照提示按任意键结束返回主菜单,如果查找失败系统执行if(i>
=n)语句得到flag=0;
if(flag==0),系统提示该学生不在其中如果所输入的学生姓名不存在系统提示输入错误。
执行相应的程序与功能。
4)对学生成绩进行排序
structstudentpxy;
max=stu[0].english;
for(i=1;
if(max<
stu[i].english)
{max=stu[i].english;
y=i;
n-i;
if(stu[j].english<
stu[j+1].english)
{pxy=stu[j];
stu[j+1]=pxy;
图4-3排序函数流程图
进入排序函数后,选择排序科目与排序方式,排序采用从大到小排序,系统就会根据用户输入的数字进行相应的排序,排序时采用冒泡法,将结构体数组中两个相邻的两个元素进行比较,定义一个中间变量structstudentpxy;
进行交换,将较大的那个元素掉到较小的元素之前,例如if(stu[j].english<
系统中存储了n个学生,即有n个人需要排序,采用for语句,循环进行n-1次比较,而在第i次比较中,需要进行n-i次的两两比较。
完成后,采用二维数组进行从大到小的输出
四、程序源代码
#include<
stdio.h>
#include<
time.h>
conio.h>
stdlib.h>
string.h>
#defineN100
structstudent
{charnumber[N];
charname[N];
charxingbie;
floatmath;
floatenglish;
floatcomputer;
floatp;
};
intn;
structstudentstu[N];
voidsave(intn)
inti=0;
intread()
rb+"
))==NULL)
{
无法打开文件!
while(!
feof(fp))
fread(&
stu[i],sizeof(structstudent),1,fp);
i++;
returni-1;
voidwrite(intnum)
wb+"
\t\t\t无法打开文件!
num;
fwrite(&
voidmenu()
{printf("
\t\t欢迎进入学生信息管理系统\t\t\n"
\t\t************************\t\t\n"
\t\t1、输入学生信息\t\t\n"
\t\t2、学生成绩浏览\t\t\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)