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;iprintf("%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;ifor(j=0;jif(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