C语言 学生成绩管理系统.docx

上传人:b****7 文档编号:9220861 上传时间:2023-02-03 格式:DOCX 页数:62 大小:360.52KB
下载 相关 举报
C语言 学生成绩管理系统.docx_第1页
第1页 / 共62页
C语言 学生成绩管理系统.docx_第2页
第2页 / 共62页
C语言 学生成绩管理系统.docx_第3页
第3页 / 共62页
C语言 学生成绩管理系统.docx_第4页
第4页 / 共62页
C语言 学生成绩管理系统.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

C语言 学生成绩管理系统.docx

《C语言 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言 学生成绩管理系统.docx(62页珍藏版)》请在冰豆网上搜索。

C语言 学生成绩管理系统.docx

C语言学生成绩管理系统

泉州师范学院数学与计算机科学学院

 

《高级语言程序设计》

综合实验报告

 

 

目录

1实验题目:

学生成绩管理系统3

2实验目的与实验要求3

2.1.实验目的3

2.2.实验要求3

3功能描述4

3.1、输入学生信息4

3.2、注销学生信息4

3.3、查询学生信息4

3.4、修改学生信息4

3.5、添加学生信息4

3.6、学生信息排序4

3.7、学生信息统计5

3.8、显示学生信息5

3.9、帮助信息5

3.10、退出本系统5

4内容与设计思想5

4.1系统流程图5

4.2详细设计6

5运行结果及测试27

6总结37

6.1碰到的问题37

6.2程序有待改进的地方38

6.3心得和体会38

7参考文献38

8附录(程序清单及注释)39

1实验题目:

学生成绩管理系统

2实验目的与实验要求

2.1.实验目的

1)能够利用所学的基本知识和技能,解决简单的程序设计问题;

2)进一步理解和运用结构化程序设计的思想和方法;

3)初步掌握开发一个小型实用系统的基本方法;

4)学会利用流程图或N-S图表示算法;

5)掌握书写程序设计开发文档的能力。

2.2.实验要求

Ø基本要求:

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;

case'2':

if(n==0)

{

creat();break;

}

del();break;

case'3':

if(n==0)

{

creat();break;

}

search();break;

case'4':

if(n==0)

{

creat();break;

}

modify();break;

case'5':

if(n==0)

{

creat();break;

}

add();break;

case'6':

if(n==0)

{

creat();break;

}

sort();break;

case'7':

if(n==0)

{

creat();break;

}

statistics();break;

case'8':

if(n==0)

{

creat();break;

}

display();break;

case'9':

help();break;

case'0':

break;

default:

printf("\n\n输入错误,请重新输入(0-9)!

\n");

}

if(choose=='0')break;

printf("\n\n返回主菜单请输入(y)退出系统请输入(n)\n\n");

do

{

yes_no=getche();

}while(yes_no!

='y'&&yes_no!

='n');

}while(yes_no=='y');

}

 

(2)各模块功能及程序说明

模块一:

menu()模块

功能:

显示主菜单界面。

程序说明:

只要运用printf语句即可。

 

模块二:

creat()模块

功能:

按照提示输入10个学生的学号、姓名、性别及三门功课(数学、英语、计算机)的成绩。

程序说明:

运用链表,先开辟空间在读入数据。

知道n不小于10.

N-S流程图:

n=0

开辟一个新结点,并使p1、p2指向它

读入一个学生数据给p1所指的结点

Head=p1

n<10

n=n+1

p2->next=p1

(把p1所指的结点链接到表尾)

P2=p1(p2移到表尾)

在开辟一个新结点,并使p1指向它

读入一个学生数据给p1所指的结点

表尾结点的指针变量置NULL

Creat()模块N-S流程图

关键代码及代码注释

voidcreat()/*输入学生信息*/

{

structstudent*p1,*p2;

top();

n=0;

top();

head=NULL;

n=0;

p1=p2=(structstudent*)malloc(LEN);

printf("\n请输入10个学生的信息(包括:

学号,姓名,性别,数学成绩,英语成绩,计算机成绩!

)\n");

printf("\n请输入第%d个学生的信息:

\n",++n);

printf("\n请输入学生的学号:

");gets(p1->num);

printf("\n请输入学生的姓名:

");gets(p1->name);

printf("\n请输入学生的性别(boy/girl):

");gets(p1->sex);

printf("\n请输入学生的数学成绩:

");scanf("%f",&p1->score[0]);

printf("\n请输入学生的英语成绩:

");scanf("%f",&p1->score[1]);

printf("\n请输入学生的计算机成绩:

");scanf("%f%*c",&p1->score[2]);

head=p1;

while(n<10)

{

n=n++;

top();

p1=(structstudent*)malloc(LEN);

p2->next=p1;

p2=p1;

printf("\n请输入第%d个学生的信息:

\n",n);

printf("\n请输入学生的学号:

");gets(p1->num);

printf("\n请输入学生的姓名:

");gets(p1->name);

printf("\n请输入学生的性别(boy/girl):

");gets(p1->sex);

printf("\n请输入学生的数学成绩:

");scanf("%f",&p1->score[0]);

printf("\n请输入学生的英语成绩:

");scanf("%f",&p1->score[1]);

printf("\n请输入学生的计算机成绩:

");scanf("%f%*c",&p1->score[2]);

}

p2->next=NULL;

}

 

模块三:

display()模块

功能:

显示系统中所有学生的信息。

程序说明:

指针指向头结点,然后一一输出链表中的学生数据。

N-S流程图:

P1=head,使p1指向第一个结点

P1是要注销的结点

是否

输出p1指向的结点

当p1指向不是表尾

display()模块N-S流程图

关键代码及代码注释

voiddisplay()/*显示学生信息*/

{

structstudent*p1=head;

top();

printf("\nNow,There%drecordsare:

\n\n",n);

printf("学号姓名性别数学英语计算机\n");

if(head!

=NULL)

while(p1)

{

printf("%-10s%-10s%-4s%-5.2f%-5.2f%-5.2f\n",p1->num,p1->name,p1->sex,p1->score[0],p1->score[1],p1->score[2]);

p1=p1->next;

}

printf("\n");

}

 

模块四:

del()模块

功能:

按照学号查找是否存在该学生的记录,若存在删除其记录,不存在给出相应信息。

(功能可以扩展:

按姓名删除记录。

程序说明:

根据输入的学生号,在链表中移动指针找出所要注销的结点,将结点的前一个结点与后一个结点相接。

N-S流程图:

P1=head

当num≠p1->num以及p1所指的结点不是表尾结点

P2=p1(p2后移一个位置)

P1=p1->next(p1后移一个位置)

P1是要注销的结点

是否

p1所指是头结点

是否

输出“不存在要注销的学生”

Head=p1->next

(注销头结点)

P2->next=p1->next

当输入为y时(继续注销)

del()模块N-S流程图

关键代码及代码注释

voiddel()/*注销学生信息*/

{

structstudent*p1=head,*p2;

charnum[10],ch;

top();

printf("\n\n请输入您所要注销的学生号:

\n\n");

gets(num);

while(strcmp(num,p1->num)!

=0&&p1->next!

=NULL)

{

p2=p1;p1=p1->next;

}

if(strcmp(num,p1->num)==0)

{

if(p1==head)

head=p1->next;

else

p2->next=p1->next;

printf("\n\n注销成功!

\n");

n--;

printf("\n\n是否要继续注销学生信息?

是/否:

(y/n)\n\n");

scanf("%c%*c",&ch);

if(ch=='y')del();

}

else

printf("\n\n不存在您所要注销的学生号!

\n\n");

}

 

模块五:

search()模块

功能:

按照学号查找是否存在该学生的记录,若存在则输出其各科成绩,不存在给出相应信息。

(功能可以扩展:

按姓名进行查找。

程序说明:

根据输入的学生号,在链表中移动指针找出所要寻找的结点,输出结点信息即可。

N-S流程图:

P1=head

输入所要查询的学生号给num

当q->num≠p1->num以及p1所指的结点不是表尾结点

 

P2=p1(p2后移一个位置)

P1=p1->next(p1后移一个位置)

p1是要查询的结点

是否

输出p1所指向的结点

输出“不存在所要查询的学生”

当输入为y时(继续查询)

search()模块N-S流程图

关键代码及代码注释

voidsearch()/*查询学生信息*/

{

structstudent*p1;

charnum[10],ch;

intflag=1;

p1=head;

top();

printf("\n\n请输入您所要查询的学生号:

\n\n");

gets(num);

while(strcmp(num,p1->num)!

=0&&p1->next!

=NULL)

p1=p1->next;

if(strcmp(num,p1->num)==0)

{

top();

printf("该学生信息如下:

\n\n");

printf("学号:

");printf("%-10s\n\n",p1->num);

printf("姓名:

");printf("%-10s\n\n",p1->name);

printf("性别:

");printf("%-5s\n\n",p1->sex);

printf("数学成绩:

");printf("%.2f\n\n",p1->score[0]);

printf("英语成绩:

");printf("%.2f\n\n",p1->score[1]);

printf("计算机成绩:

");printf("%.2f\n\n",p1->score[2]);

flag=0;

printf("\n\n是否要继续查询学生信息?

是/否:

(y/n)\n\n");

scanf("%c%*c",&ch);

if(ch=='y')search();

}

if(flag)printf("\n\n\n不存在您所要查询的学生号!

\n\n");

}

 

模块六:

modify()模块

功能:

按照提示修改某一名学生的学号、姓名、性别及各科成绩。

程序说明:

根据输入的学生号,在链表中移动指针找出所要修改的结点,再将正确信息赋给该结点。

N-S流程图:

P1=head

开辟一个新结点,并使q指向它

读入一个学生数据给q所指的结点

当q->num≠p1->num以及p1所指的结点不是表尾结点

 

P2=p1(p2后移一个位置)

P1=p1->next(p1后移一个位置)

p1是要修改的结点

是否

P1->num=q->num

P1->name=q->name

P1->sex=q->sex

P1->score[0]=q->score[0]

P1->score[1]=q->score[1]

P1->score[2]=q->score[2]

输出“不存在要修改的学生”

当输入为y时(继续修改)

modify()模块N-S流程图

关键代码及代码注释

voidmodify()/*修改学生信息*/

{

structstudent*p1,*q;

charnum[10],ch;

intflag=1;

p1=head;

top();

printf("\n\n请输入您所要修改的学生号:

\n\n");

gets(num);

while(strcmp(num,p1->num)!

=0&&p1->next!

=NULL)

p1=p1->next;

if(strcmp(num,p1->num)==0)

{

q=p1;

printf("\n请输入正确的学生信息:

\n\n");

printf("\n请输入学生的学号:

");gets(p1->num);

printf("\n请输入学生的姓名:

");gets(p1->name);

printf("\n请输入学生的性别(boy/girl):

");gets(p1->sex);

printf("\n请输入学生的数学成绩:

");scanf("%f",&p1->score[0]);

printf("\n请输入学生的英语成绩:

");scanf("%f",&p1->score[1]);

printf("\n请输入学生的计算机成绩:

");scanf("%f%*c",&p1->score[2]);

flag=0;

printf("\n\n修改成功!

!

\n\n");

printf("\n\n是否要继续修改学生信息?

是/否:

(y/n)\n\n");

scanf("%c%*c",&ch);

if(ch=='y')modify();

}

if(flag)

printf("\n\n不存在您所要修改的学生号!

\n\n");

}

 

模块七:

sort()模块

功能:

按学号对所有学生进行排序。

(功能可以扩展:

按姓名或者按照成绩进行排序。

程序说明:

根据冒泡排序法,在链表中移动指针对各学生的学号进行排序。

 

N-S流程图:

P1=head

开辟一个新结点,并使q指向它

i由0变到n-2共执行n-1循环

进行n-i次比较

p1->num>p1->next->num

真假

交换p1yup1->next里的信息

sort()模块N-S流程图

 

关键代码及代码注释

voidsort()/*学生信息排序*/

{

inti,j;

charch;

structstudent*p1=head,*q;

q=(structstudent*)malloc(LEN);

for(i=0;i

{

for(j=0;j

{

if(strcmp(p1->num,p1->next->num)>0)

{

strcpy(q->num,p1->num);strcpy(p1->num,p1->next->num);strcpy(p1->next->num,q->num);

strcpy(q->name,p1->name);strcpy(p1->name,p1->next->name);strcpy(p1->next->name,q->name);

strcpy(q->sex,p1->sex);strcpy(p1->sex,p1->next->sex);strcpy(p1->next->sex,q->sex);

q->score[0]=p1->score[0];p1->score[0]=p1->next->score[0];p1->next->score[0]=q->score[0];

q->score[1]=p1->score[1];p1->score[1]=p1->next->score[1];p1->next->score[1]=q->score[1];

q->score[2]=p1->score[2];p1->score[2]=p1->next->score[2];p1->next->score[2]=q->score[2];

}

p1=p1->next;

}

p1=head;

}

top();

printf("\n\n排序成功!

\n\n是否要显示排序后学生信息?

是/否:

(y/n)\n\n");

scanf("%c%*c",&ch);

if(ch=='y')display();

}

 

模块八:

add()模块

功能:

添加新生信息到已有的学生链表(要求按学号的顺序插入)。

程序说明:

根据输入的学生号,在链表中移动指针找出第一个大于该学生号的结点,在将结点所要添加的结点插入这个结点之前。

N-S流程图:

P1=head

开辟一个新结点,并使q指向它

读入一个学生数据给q所指的结点

当q->num>p1->num以及p1所指的结点不是表尾结点

 

P2=p1(p2后移一个位置)

P1=p1->next(p1后移一个位置)

q->numnum

真假

p1指向头结点

是否

P1->next=q

q->next=NULL

(插到表尾之后)

n=n+1

head=q

q->next=p1

(插到表头之前)

n=n+1

P2->next=q

q->next=p1

(插到表中间)

n=n+1

当输入为y时(继续查询)

add()模块N-S流程图

 

关键代码及代码注释

voidadd1()/*添加学生信息子模块*/

{

structstudent*p1=head,*p2,*q;

intflag=1;

charch;

top();

q=(structstudent*)malloc(LEN);

printf("\n请输入您所要添加的学生信息:

\n\n");

printf("\n请输入学生的学号:

");gets(q->num);

printf("\n请输入学生的姓名:

");gets(q->name);

printf("\n请输入学生的性别(boy/girl):

");gets(q->sex);

printf("\n请输入学生的数学成绩:

");scanf("%f",&q->score[0]);

printf("\n请输入学生的英语成绩:

");scanf("%f",&q->score[1]);

printf("\n请输入学生的计算机成绩:

");scanf("%f%*c",&q->score[2]);

if(head==NULL)

{

head=q;q->next=NULL;

}

else

{

whi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1