学生信息管理系统Word文档格式.docx
- 文档编号:7900824
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:25
- 大小:112.94KB
学生信息管理系统Word文档格式.docx
《学生信息管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统Word文档格式.docx(25页珍藏版)》请在冰点文库上搜索。
二、概要设计
对程序中用到的所有全局数据类型进行定义、说明主程序及各程序模块、各程序模块之间的调用关系。
1、数据类型定义
2、程序流程
学生基本信息管理模块
(1)能从后台实现添加学生。
输入学生基本信息时,输入学号后及判断有无该学生,若有则不用输入并显示出该学生的学号、姓名等基本信息;
无该学生的信息则输入。
(2)管理员能从后台查询、修改学生的基本信息。
查询时可以多条件查询,条件有姓名、学号。
可分页显示学生信息,并可选择编辑修改学生的信息。
(3)学生能从前台输入学号查询自己的基本信息。
3、模块\函数层次关系
A、创建模块:
此模块可以连续输入20个学生的资料,每输入完一个学生的信息会提示“是否继续录入?
(y/n):
”,若继续输入则“y”,否则“n”,并把输入的信息保存到student.txt文档中。
B、查询模块:
此模块中使用者可以用两种方式查询学生成绩。
分别为
(1)按学号查询
(2)按姓名查询。
在这里以按学号查询为例:
先选择按学号查询,输入要查询的学生的学号,系统确认此学号在student.txt存在后读取信息并在屏幕上输出学生记录。
C、修改模块:
输入要修改学生的姓名,若有此学生的信息,则按照提示输入学号、性别、年龄、籍贯、成绩、健康状况、教育程度;
若没有此学生的信息,则提示“没有姓名…的学生”。
修改完毕后提示“修改成功!
”,按任意键则退出此模块。
D、删除模块:
此模块中用到的删除原理为覆盖要删除的学生的资料。
过程简述,先输入要删除的学生的姓名,系统找到此学生的信息后,会出现此学生的所有信息,提示“确定删除该学生信息?
”,若“y”,则提示“删除成功!
”。
若无此学生的信息则提示“没有姓名为…的学生”。
E、排序模块:
此模块可以使用两种方式对学生进行排序。
分别为
(1)按学号排序
(2)按分数排序。
F、打印模块:
若有学生信息,则打印所有学生的信息;
否则无法打印。
三、详细设计
完成概要设计中所有模块的编程和调试。
程序代码如下:
#include<
stdio.h>
malloc.h>
stdlib.h>
string.h>
#defineLENsizeof(structstudent)
typedefstructstudent
{
charname[20];
longnum;
charsex[5];
intage;
charaddr[30];
intscore;
charhealth[20];
charedu[20];
structstudent*next;
}STI;
voidinput();
STI*open();
voidnumfind(STI*);
voidnamefind(STI*);
voidmodify(STI*);
voiddelet(STI*);
voidnumsort(STI*);
voidscoresort(STI*);
voidprint(STI*);
voidrenew(STI*);
intn;
voidmain()
STI*fhead;
intchoice,flag=1;
chars;
while(flag)
{
printf("
\n****************************************\n"
);
欢迎使用学生信息管理系统!
"
\n"
****************************************\n\n"
>
>
主窗口菜单<
<
\n\n"
1.录入学生信息\n\n"
2.查找学生信息\n\n"
3.修改学生信息\n\n"
4.删除学生信息\n\n"
5.排序学生信息\n\n"
6.打印学生信息\n\n"
0.退出\n"
printf("
\n请选择:
scanf("
%d"
&
choice);
getchar();
switch(choice)
{
case0:
exit(0);
case1:
input();
break;
case2:
system("
cls"
printf("
\na.按学号查找\n\n"
b.按姓名查找\n"
scanf("
%c"
s);
getchar();
fhead=open();
if(s=='
a'
)
numfind(fhead);
elseif(s=='
b'
namefind(fhead);
else
printf("
\n输入错误\n"
case3:
modify(fhead);
case4:
delet(fhead);
case5:
\na.按学号排序\n\n"
b.按成绩排序\n"
\n请选择:
numsort(fhead);
scoresort(fhead);
break;
case6:
print(fhead);
default:
\n输入错误!
}
\n按任意键返回主菜单!
system("
}
}
voidinput()//录入学生信息
intflag=1;
FILE*fp;
STI*p,*p1,*p2,*head;
head=p1=p2=(STI*)malloc(LEN);
while(flag==1)
\n姓名:
%s"
p1->
name);
\n学号:
%ld"
num);
\n性别:
sex);
\n年龄:
age);
\n地址:
addr);
\n成绩:
score);
\n健康状况:
health);
\n教育程度:
edu);
\n是否继续录入?
if(s=='
y'
p2=p1;
p1=(STI*)malloc(LEN);
p2->
next=p1;
else
flag=0;
}
p1->
next=NULL;
p=head;
if((fp=fopen("
student.txt"
"
ab"
))==NULL)
if((fp=fopen("
wb"
printf("
无法打开文件!
exit(0);
while(p!
=NULL)
if(fwrite(p,LEN,1,fp)!
=1)
无法保存!
p=p->
next;
fclose(fp);
\n录入成功!
STI*open(void)//查找学生信息
STI*fhead,*p1,*p2;
fhead=NULL;
p1=p2=(STI*)malloc(LEN);
rb"
))!
fread(p1,LEN,1,fp);
n=0;
while(!
feof(fp))
n=n+1;
if(n==1)
fhead=p1;
else
p2->
p1=(STI*)malloc(LEN);
fread(p1,LEN,1,fp);
p2->
else
fp=fopen("
fclose(fp);
return(fhead);
voidnamefind(STI*head)//姓名查询模块
inta=0;
charfindname[20];
STI*p;
\n请输入姓名:
gets(findname);
while(p!
if(strcmp(findname,p->
name)==0)
a=a+1;
if(a==1)
\n姓名学号性别年龄地址成绩健康状况教育程度\n\n"
%-8s%-8ld%-8s%-8d%-14s%-9d%-12s%-8s\n"
p->
name,p->
num,p->
sex,p->
age,p->
addr,p->
score,p->
health,p->
p=p->
if(a==0)
\n没有姓名%s的学生\n"
findname);
voidnumfind(STI*head)//学号查询模块
intfindnum=0,a=0;
\n请输入学号:
scanf("
findnum);
getchar();
if(findnum==p->
num)
\n没有学号为%ld的学生\n"
findnum);
voidmodify(STI*head)//修改学生信息
system("
%-8s%-8ld%-8s%-8d%-10s%-14d%-14s%-14s\n"
\n请修改!
p->
\n教育状况:
\n修改成功!
renew(head);
voiddelet(STI*head)//删除学生信息
charc,findname[20];
STI*p1,*p2;
p1=p2=head;
while(p1!
if(strcmp(findname,p1->
a=a+1;
p1->
name,p1->
num,p1->
sex,p1->
age,p1->
addr,p1->
score,p1->
health,p1->
\n确定删除该学生信息?
c=getchar();
if(c=='
if(p1==head)
p1=p2=head=p1->
{
next=p1->
free(p1);
p1=p2;
}
\n删除成功!
p2=p1;
if(p1!
p1=p1->
else;
\n没有姓名为%s的学生\n"
voidrenew(STI*head)
FILE*fp;
structstudent*p;
web"
无法打开文件!
exit(0);
while(p!
if(fwrite(p,LEN,1,fp)!
p=p->
voidprint(STI*head)//打印学生信息
STI*p;
if(p==NULL)
\n无任何信息!
do
%-8s%-8ld%-8s%-8d%-10s%-14d%-14s%-14s\n\n"
}while(p!
=NULL);
}
voidnumsort(STI*head)//按学号排序模块
inti;
STI*p1,*p2,*p3,*end=NULL;
p1=p2=p3=head;
if(head!
=NULL&
&
head->
next!
for(i=1;
i<
n;
i++)
p1=p1->
while(p1!
=end)
if(p1->
num<
p2->
{
p2->
p1->
next=p2;
if(p2==p3)
head=p1;
else
p3->
p3=p1;
p1=p2->
p3=p2;
p2=p1;
p1=p1->
end=p2;
p1=p2=p3=head;
排序已完成,请从打印中查看排序后的结果!
voidscoresort(STI*head)//按分数排序模块
score<
p2->
score)
四、调试分析
调试分析应包括:
1、调试过程中遇到哪些问题,这些问题是如何解决的;
此程序的不足之处在学生基本信息方面还不够完善,另一方面就是在运行此程序时,需要执行操作的提示语不够具体和完善。
改进方法:
可以在学生基本信息的结构体中添加更多的学生信息,使得学生信息更加完善,此外,还可以在编程时加一些必要的提示语,用printf(“”);
语句直接可输入。
2、算法的效率和改进设想;
(1)查找学生信息
问题:
若没有此学生信息,则直接返回主菜单
改进设想:
若此学生不存在在,则应提示是继续查找学生信息,还是退出输入。
(2)删除学生信息:
与查找学生信息的改进方法相同。
(3)添加将所有记录写入文件的功能,这样可以把学生信息存入文件并保存下来。
五、测试结果
列出测试结果。
测试数据应该完整严格,包括正确的输入输出结果,及其含有错误的输入输出结果。
1.录入学生信息
测试数据:
输入学生信息
测试结果:
性别与年龄一起显示,无法输入性别
原因:
学号数据类型是long长整型,而输入的是char字符型,不符合要求
2、排序学生信息
选择a,按学号排序
排序后需在打印功能中出现结果,排序成功。
六、操作简介
运行后,主界面如下:
选择1、录入学生信息
输入zhangsan学生的信息
程序运行正常,录入成功。
选择2、查找学生信息
选择a,按学号查询:
程序运行正常,查询成功。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统