C语言 学生成绩管理系统Word文件下载.docx
- 文档编号:22356954
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:62
- 大小:360.52KB
C语言 学生成绩管理系统Word文件下载.docx
《C语言 学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言 学生成绩管理系统Word文件下载.docx(62页珍藏版)》请在冰豆网上搜索。
1)要求利用C语言面向过程的编程思想来完成系统的设计;
2)突出C语言的函数特征,以多个函数实现每一个子功能;
3)画出功能模块图;
4)进行简单界面设计(见附录图1),能够实现友好的交互;
5)具有清晰的程序流程图和数据结构的详细定义;
6)按实验报告电子模板格式填写实验内容。
创新要求:
在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同。
3功能描述
3.1、输入学生信息
按照提示输入10个学生的学号、姓名、性别及三门功课(数学、英语、计算机)的成绩。
3.2、注销学生信息
按照学号查找是否存在该学生的记录,若存在删除其记录,不存在给出相应信息。
(功能可以扩展:
按姓名删除记录。
)
3.3、查询学生信息
按照学号查找是否存在该学生的记录,若存在则输出其各科成绩,不存在给出相应信息。
按姓名进行查找。
3.4、修改学生信息
按照提示修改某一名学生的学号、姓名、性别及各科成绩。
3.5、添加学生信息
添加新生信息到已有的学生链表(要求按学号的顺序插入)。
3.6、学生信息排序
按学号对所有学生进行排序。
按姓名或者按照成绩进行排序。
3.7、学生信息统计
(1)输入学生的学号,则统计该生的总分及平均分;
(2)输入课程名,则求出该门课程的总平均分。
3.8、显示学生信息
显示系统中所有学生的信息。
3.9、帮助信息
获得帮助信息。
3.10、退出本系统
4内容与设计思想
4.1系统流程图
1234567890
4.2详细设计
(1)主函数main()模块
该模块功能说明:
利用C语言面向过程的编程思想来完成对学生管理系统的设计。
(2)显示第一个页面:
(3)算法说明及N-S流程图
说明:
通过switch语句选择对学生管理系统的操作。
N-S流程图:
n=0
读入一个数字(0-9)给choose
是chooce=1否
调用cre
at()
是choose=2否
调用
del
()
是choose=3否
sear
ch()
是choose=4否
调
用
modi
fy()
是choose=5否
add
是choose=6否
sort
是choose=7否
sta()
是choose=8否
disp
lay()
是choose=9否
help
退出
(4)关键代码及代码注释
voidmain()
{
charchoose,yes_no;
n=0;
do
{
menu();
choose=getch();
switch(choose)
{
case'
1'
:
creat();
break;
2'
if(n==0)
{
creat();
}
del();
3'
search();
4'
modify();
5'
add();
6'
sort();
7'
}
statistics();
8'
display();
9'
help();
0'
default:
printf("
\n\n输入错误,请重新输入(0-9)!
\n"
);
}
if(choose=='
)break;
\n\n返回主菜单请输入(y)退出系统请输入(n)\n\n"
yes_no=getche();
}while(yes_no!
='
y'
&
yes_no!
n'
}while(yes_no=='
}
(2)各模块功能及程序说明
模块一:
menu()模块
功能:
显示主菜单界面。
程序说明:
只要运用printf语句即可。
模块二:
creat()模块
运用链表,先开辟空间在读入数据。
知道n不小于10.
开辟一个新结点,并使p1、p2指向它
读入一个学生数据给p1所指的结点
Head=p1
n<
10
n=n+1
p2->
next=p1
(把p1所指的结点链接到表尾)
P2=p1(p2移到表尾)
在开辟一个新结点,并使p1指向它
表尾结点的指针变量置NULL
Creat()模块N-S流程图
关键代码及代码注释
voidcreat()/*输入学生信息*/
structstudent*p1,*p2;
top();
head=NULL;
p1=p2=(structstudent*)malloc(LEN);
\n请输入10个学生的信息(包括:
学号,姓名,性别,数学成绩,英语成绩,计算机成绩!
)\n"
\n请输入第%d个学生的信息:
++n);
\n请输入学生的学号:
"
gets(p1->
num);
\n请输入学生的姓名:
name);
\n请输入学生的性别(boy/girl):
sex);
\n请输入学生的数学成绩:
scanf("
%f"
&
p1->
score[0]);
\n请输入学生的英语成绩:
score[1]);
\n请输入学生的计算机成绩:
%f%*c"
score[2]);
head=p1;
while(n<
10)
n=n++;
p1=(structstudent*)malloc(LEN);
p2->
next=p1;
p2=p1;
n);
}
next=NULL;
模块三:
display()模块
指针指向头结点,然后一一输出链表中的学生数据。
P1=head,使p1指向第一个结点
P1是要注销的结点
是否
输出p1指向的结点
当p1指向不是表尾
display()模块N-S流程图
voiddisplay()/*显示学生信息*/
structstudent*p1=head;
\nNow,There%drecordsare:
\n\n"
学号姓名性别数学英语计算机\n"
if(head!
=NULL)
while(p1)
%-10s%-10s%-4s%-5.2f%-5.2f%-5.2f\n"
p1->
num,p1->
name,p1->
sex,p1->
score[0],p1->
score[1],p1->
p1=p1->
next;
模块四:
del()模块
根据输入的学生号,在链表中移动指针找出所要注销的结点,将结点的前一个结点与后一个结点相接。
P1=head
当num≠p1->
num以及p1所指的结点不是表尾结点
P2=p1(p2后移一个位置)
P1=p1->
next(p1后移一个位置)
p1所指是头结点
输出“不存在要注销的学生”
Head=p1->
next
(注销头结点)
P2->
next=p1->
当输入为y时(继续注销)
del()模块N-S流程图
voiddel()/*注销学生信息*/
structstudent*p1=head,*p2;
charnum[10],ch;
\n\n请输入您所要注销的学生号:
gets(num);
while(strcmp(num,p1->
num)!
=0&
next!
p2=p1;
p1=p1->
if(strcmp(num,p1->
num)==0)
if(p1==head)
head=p1->
else
\n\n注销成功!
n--;
\n\n是否要继续注销学生信息?
是/否:
(y/n)\n\n"
scanf("
%c%*c"
ch);
if(ch=='
)del();
\n\n不存在您所要注销的学生号!
模块五:
search()模块
根据输入的学生号,在链表中移动指针找出所要寻找的结点,输出结点信息即可。
输入所要查询的学生号给num
当q->
num≠p1->
p1是要查询的结点
输出p1所指向的结点
输出“不存在所要查询的学生”
当输入为y时(继续查询)
search()模块N-S流程图
voidsearch()/*查询学生信息*/
structstudent*p1;
intflag=1;
p1=head;
\n\n请输入您所要查询的学生号:
=0&
top();
该学生信息如下:
\n\n"
学号:
"
printf("
%-10s\n\n"
姓名:
性别:
%-5s\n\n"
数学成绩:
%.2f\n\n"
英语成绩:
计算机成绩:
flag=0;
\n\n是否要继续查询学生信息?
)search();
if(flag)printf("
\n\n\n不存在您所要查询的学生号!
模块六:
modify()模块
根据输入的学生号,在链表中移动指针找出所要修改的结点,再将正确信息赋给该结点。
开辟一个新结点,并使q指向它
读入一个学生数据给q所指的结点
p1是要修改的结点
P1->
num=q->
num
name=q->
name
sex=q->
sex
score[0]=q->
score[0]
score[1]=q->
score[1]
score[2]=q->
score[2]
输出“不存在要修改的学生”
当输入为y时(继续修改)
modify()模块N-S流程图
voidmodify()/*修改学生信息*/
structstudent*p1,*q;
\n\n请输入您所要修改的学生号:
q=p1;
\n请输入正确的学生信息:
\n\n修改成功!
!
\n\n是否要继续修改学生信息?
)modify();
if(flag)
printf("
\n\n不存在您所要修改的学生号!
模块七:
sort()模块
根据冒泡排序法,在链表中移动指针对各学生的学号进行排序。
i由0变到n-2共执行n-1循环
进行n-i次比较
num>
next->
真假
交换p1yup1->
next里的信息
sort()模块N-S流程图
voidsort()/*学生信息排序*/
inti,j;
charch;
structstudent*p1=head,*q;
q=(structstudent*)malloc(LEN);
for(i=0;
i<
n-1;
i++)
for(j=0;
j<
n-1-i;
j++)
{
if(strcmp(p1->
num)>
0)
strcpy(q->
strcpy(p1->
num,q->
strcpy(q->
name,q->
sex,q->
q->
score[0]=p1->
score[0];
score[1]=p1->
score[1];
score[2]=p1->
score[2];
}
p1=head;
\n\n排序成功!
\n\n是否要显示排序后学生信息?
)display();
模块八:
add()模块
根据输入的学生号,在链表中移动指针找出第一个大于该学生号的结点,在将结点所要添加的结点插入这个结点之前。
q->
num<
p1指向头结点
next=q
next=NULL
(插到表尾之后)
head=q
(插到表头之前)
(插到表中间)
add()模块N-S流程图
voidadd1()/*添加学生信息子模块*/
structstudent*p1=head,*p2,*q;
\n请输入您所要添加的学生信息:
gets(q->
if(head==NULL)
head=q;
else
whi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 学生成绩管理系统 语言 学生 成绩管理系统