c语言学生管理系统.docx

上传人:b****5 文档编号:5127219 上传时间:2022-12-13 格式:DOCX 页数:24 大小:514.31KB
下载 相关 举报
c语言学生管理系统.docx_第1页
第1页 / 共24页
c语言学生管理系统.docx_第2页
第2页 / 共24页
c语言学生管理系统.docx_第3页
第3页 / 共24页
c语言学生管理系统.docx_第4页
第4页 / 共24页
c语言学生管理系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

c语言学生管理系统.docx

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

c语言学生管理系统.docx

c语言学生管理系统

C语言课程设计报告

 

项目名称:

C6学生管理系统

所在班级:

************

小组成员:

****

任课教师:

****

起止时间:

2014/5/8—2014/6/12

项目基本信息

项目名称

C6学生管理系统

项目简介

建立结构体数组,用来保存学生信息,定义子函数,使其实现对学生信息进行修改、删除、按学号查询、按姓名查询、以及学生信息的插入和排序等功能。

小组成员

***

任务分工

全部工作:

***

 

课程实践评定成绩记录

指导教师意见

系统完成情况:

优良中差

报告完成情况:

优良中差

答辩评定成绩

团队整体成绩:

成员成绩

****

1309060****5

综合成绩

一、问题描述及分析

1、如何保存输入的学生信息,使其利于后续工作的开展,使用结构体数组明显满足不了这种要求,经过反复实验,只有while循环最适合。

2、全局变量的不正确使用容易使程序出现混乱,必须在每次使用后确定全局变量n的大小。

3、变量依据使用情况而定,每次使用新的变量时要到前面进行定义,避免编译、链接或运行时出现错误。

二、功能模块及数据结构描述

1、voidpaixu(structstudents[])自定义排序函数

2、voidcharu(structstudentstu[])自定义信息插入函数

3、voidcheck(structstudentstu[],intxuehao)自定义依据学号查询函数

4、voidxiugai(structstudentstu[],intxuehao)自定义信息修改函数

5、voidshanchu(structstudentstu[],intxuehao)自定义信息插入函数

6、voidbijiao(structstudentstu[],charxingming[])自定义依据姓名查询函数

三、部分核心算法及主要算法流程描述

流程图如下图所示。

开始

 

定义变量

进入菜单

退出学生管理系统

按学号查询信心

按姓名查询信息

学生信息增添

学生信息删除

学生信息修改

学生信息录入

按学号进行排序

 

结束

核心算法为:

1、冒泡排序法(依据学号对学生进行排序)

voidpaixu(structstudents[])//自定义排序函数————<排序>

{

structstudenttemp;

inti,j;

for(i=0;i

for(j=0;j

if(s[j].num>s[j+1].num)

{

temp=s[j];

s[j]=s[j+1];

s[j+1]=temp;

}

printf("这%d个学生的信息为:

\n",n);

printf("学号:

姓名:

年龄:

性别:

出生年月日:

地址:

电话:

E-mail:

\n");

for(j=0;j

if(s[j].num!

=0)

printf("%d%s%d%s%d%d%d%s%s%s\n",s[j].num,s[j].name,s[j].age,s[j].secx,s[j].year,s[j].month,s[j].day,s[j].add,s[j].pho,s[j].em);

printf("\n");

}

2、用switch结构构建菜单

switch(m)

{

case1:

printf("请逐个输入学生信息:

\n");

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

while(stu[i].num!

=0)//利用while循环实现学生信息的输入

{

n++;

printf("请输入下一个学生的信息:

\n");

i++;

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

if(stu[i].num==0)

{

i--;

printf("学生信息录入结束!

\n");break;

}

}

printf("这%d个学生的信息为:

\n",n);

printf("学号:

姓名:

年龄:

性别:

出生年月日:

地址:

电话:

E-mail:

\n");

for(i=0;i

printf("%d%s%d%s%d%d%d%s%s%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].secx,stu[i].year,stu[i].month,stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

printf("\n");break;

case2:

printf("对信息录入错误的学生信息进行修改:

\n");//信息修改

printf("请输入信息错误的学生的学号:

\n");

scanf("%d",&xuehao);

while(xuehao!

=0)

{

xiugai(stu,xuehao);//子函数中信息修改函数的入口

printf("请输入下一个信息错误的学生的学号:

\n");

scanf("%d",&xuehao);

if(xuehao==0)

printf("学生信息修改结束!

\n");

}

case3:

printf("按照学号对这%d个学生进行排序!

\n",n);//按学号排序

paixu(stu);//子函数中排序函数的入口

break;

case4:

printf("对信息遗漏的同学进行信息采集,并按照学号递增顺序插入!

\n");//按学号插入遗漏学生信息

printf("请输入遗漏的学生的信息:

\n");

i=n;

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

while(stu[i].num!

=0)

{

printf("请输入下一个遗漏的学生的信息:

\n");

i++;

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

if(stu[i].num==0)

{

n=i;

i--;

printf("学生信息录入结束!

\n");break;

}

}

charu(stu);//子函数中信息插入函数的入口

break;

case5:

printf("下面请按照学号查询学生信息!

\n");//按学号查询学生信息

printf("请输入要查询的学生的学号:

\n");

scanf("%d",&xuehao);

while(xuehao!

=0)

{

check(stu,xuehao);//子函数中查询函数(按学号查询)的入口

printf("请输入要查询的下一个学生的学号:

\n");

scanf("%d",&xuehao);

if(xuehao==0)

printf("本次查询结束!

\n");

}

printf("\n");

break;

case6:

printf("下面请按照姓名查询学生信息!

\n");//按照姓名查询学生信息

printf("请输入要查询的学生的姓名:

\n");

scanf("%s",xingming);

while(strcmp(xingming,"0")!

=0)

{

bijiao(stu,xingming);//子函数中查询函数(按姓名查询)的入口

printf("请输入要查询的下一个学生的姓名:

\n");

scanf("%s",xingming);

if(strcmp(xingming,"0")==0)

printf("本次查询结束!

\n");

};break;

case7:

printf("按学号删除学生信息!

\n");//删除学生信息

printf("请输入要删除的学生的学号:

\n");

scanf("%d",&xuehao);

while(xuehao!

=0)

{

shanchu(stu,xuehao);//子函数中信息删除函数的入口

printf("请输入要删除的下一个学生的学号:

\n");

scanf("%d",&xuehao);

if(xuehao==0)

printf("信息删除工作结束!

\n");

};break;

四、系统使用说明

1、进入学生管理系统

在界面中输入1进行学生信息录入,并录入以下信息:

1111111111

7777777777

3333333333

9999999999

5555555555

2、信息录入结束后出现如下界面

3、在菜单中选择3,实现按照学号对学生信息进行排序,界面中会输出排序后的学生信息如下:

4、在菜单中选择2,按照学号对学生信息进行修改,界面中会提示输入信息错误的学生的学号,待输入5后,如下图:

5、确认该生信息错误后输入正确的信息:

6、确认所有学生信息无误后输入0结束修改。

在菜单中选择4对信息遗漏的学生进行信息增添,并输入学号为6的学生的信息:

7、输入学生信息后,程序会自动将该学生的信息插入,并按照学号对所有学生的信息进行排序并输出,如下图:

8、在菜单中选择5按学号对这些学生进行信息查询,查询学号为3的学生的信息:

9、在菜单中选择6按学号对这些学生进行信息查询,查询学号为7的学生的信息:

10、在菜单中选择7按学号对这些学生进行信息查询,查询学号为3的学生的信息:

11、在菜单中选择0结束学生管理工作:

以上是本程序的调试过程!

五、问题及解决办法

①变量忘记定义就在函数中使用

②全局变量代表管理的学生的个数,在程序中使用的比较混乱,在学生信息删除后全局变量没有变化,导致输出时发生错误

③对switch结构掌握的不够牢固,使用时出现错误

④从实际参数向形式参数传递数据时出现错误,导致子函数在处理数据时出现错误

⑤删除学生信息时利用信息覆盖出现错误,没有处理好n与i的关系。

六、课外实践总结

经过几周的课程设计,巩固和加深了我们对C程序的理解,提高了综合运用课本所学知识的能力。

培养了我们独立思考,深入研究、分析问题、解决问题的能力。

按照要求编写程序设计报告,能正确阐述设计和实验结果,正确绘制系统和程序框图。

同时,通过这次课程设计我们发现,数据结构基础掌握的还不够扎实,有很多地方还需要继续努力,为走向社会打下一个良好的基础。

七、源程序

#include

#include

structstudent//定义结构体

{

intnum;

charname[20];

intage;

charsecx[5];

intyear;

intmonth;

intday;

charadd[100];

charpho[20];

charem[20];

};

intn=0;

voidmain()

{

voidpaixu(structstudents[]);

voidcharu(structstudentstu[]);

voidcheck(structstudentstu[],intxuehao);

voidxiugai(structstudentstu[],intxuehao);

voidshanchu(structstudentstu[],intxuehao);

voidbijiao(structstudentstu[],charxingming[]);

intm;

inti=0;

intxuehao;

charxingming[22];

structstudentstu[222];//自定义结构体数组

printf("*******************************************************************************\n");

printf("*****************************欢迎使用学生管理系统******************************\n");

printf("****信息录入请按1;信息修改请按2;排序请按3;增添学生信息请按4;按学号查询请按5****\n");

printf("***********************按姓名查询请按6;删除信息请按7***************************\n");

printf("*******************************************************************************\n");

scanf("%d",&m);

while(m>0&&m<8)

{

switch(m)

{

case1:

printf("请逐个输入学生信息:

\n");

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

while(stu[i].num!

=0)//利用while循环实现学生信息的输入

{

n++;

printf("请输入下一个学生的信息:

\n");

i++;

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

if(stu[i].num==0)

{

i--;

printf("学生信息录入结束!

\n");break;

}

}

printf("这%d个学生的信息为:

\n",n);

printf("学号:

姓名:

年龄:

性别:

出生年月日:

地址:

电话:

E-mail:

\n");

for(i=0;i

printf("%d%s%d%s%d%d%d%s%s%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].secx,stu[i].year,stu[i].month,stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

printf("\n");break;

case2:

printf("对信息录入错误的学生信息进行修改:

\n");//信息修改

printf("请输入信息错误的学生的学号:

\n");

scanf("%d",&xuehao);

while(xuehao!

=0)

{

xiugai(stu,xuehao);//子函数中信息修改函数的入口

printf("请输入下一个信息错误的学生的学号:

\n");

scanf("%d",&xuehao);

if(xuehao==0)

printf("学生信息修改结束!

\n");

}

case3:

printf("按照学号对这%d个学生进行排序!

\n",n);//按学号排序

paixu(stu);//子函数中排序函数的入口

break;

case4:

printf("对信息遗漏的同学进行信息采集,并按照学号递增顺序插入!

\n");//按学号插入遗漏学生信息

printf("请输入遗漏的学生的信息:

\n");

i=n;

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

while(stu[i].num!

=0)

{

printf("请输入下一个遗漏的学生的信息:

\n");

i++;

scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].secx,&stu[i].year,&stu[i].month,&stu[i].day,stu[i].add,stu[i].pho,stu[i].em);

if(stu[i].num==0)

{

n=i;

i--;

printf("学生信息录入结束!

\n");break;

}

}

charu(stu);//子函数中信息插入函数的入口

break;

case5:

printf("下面请按照学号查询学生信息!

\n");//按学号查询学生信息

printf("请输入要查询的学生的学号:

\n");

scanf("%d",&xuehao);

while(xuehao!

=0)

{

check(stu,xuehao);//子函数中查询函数(按学号查询)的入口

printf("请输入要查询的下一个学生的学号:

\n");

scanf("%d",&xuehao);

if(xuehao==0)

printf("本次查询结束!

\n");

}

printf("\n");

break;

case6:

printf("下面请按照姓名查询学生信息!

\n");//按照姓名查询学生信息

printf("请输入要查询的学生的姓名:

\n");

scanf("%s",xingming);

while(strcmp(xingming,"0")!

=0)

{

bijiao(stu,xingming);//子函数中查询函数(按姓名查询)的入口

printf("请输入要查询的下一个学生的姓名:

\n");

scanf("%s",xingming);

if(strcmp(xingming,"0")==0)

printf("本次查询结束!

\n");

};break;

case7:

printf("按学号删除学生信息!

\n");//删除学生信息

printf("请输入要删除的学生的学号:

\n");

scanf("%d",&xuehao);

while(xuehao!

=0)

{

shanchu(stu,xuehao);//子函数中信息删除函数的入口

printf("请输入要删除的下一个学生的学号:

\n");

scanf("%d",&xuehao);

if(xuehao==0)

printf("信息删除工作结束!

\n");

};break;

}

printf("*******************************************************************************\n");

printf("****信息录入请按1;信息修改请按2;排序请按3;增添学生信息请按4;按学号查询请按5****\n");

printf("***********************按姓名查询请按6;删除信息请按7***************************\n");

printf("*******************************************************************************\n");

scanf("%d",&m);

}

printf("*******************************************************************************\n");

printf("**************************感谢使用学生管理系统!

***************************\n");

printf("*****************************本程序运行结束!

******************************\n");

printf("*******************************************************************************\n");

}

//externn;

voidpaixu(structstudents[])//自定义排序函数————<排序>

{

structstudenttemp;

inti,j;

for(i=0;i

for(j=0;j

if(s[j].num>s[j+1].num)

{

temp=s[j];

s[j]=s[j+1];

s[j+1]=temp;

}

printf("这%d个学生的信息为:

\n",n);

printf("学号:

姓名:

年龄:

性别:

出生年月日:

地址:

电话:

E-mail

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

当前位置:首页 > 高等教育 > 艺术

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

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