if(strcmp(stu[i].code,s1)==0)/*比较字符串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话号码\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜单\n");
printf("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
switch(item)
{
case1:
printf("请输入新的姓名:
\n");
scanf("%s",s2);
strcpy(stu[num].name,s2);break;
case2:
printf("请输入新的年龄:
\n");
scanf("%d",&stu[num].age);break;
case3:
printf("请输入新的性别:
\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1);break;
case4:
printf("请输入新的出生年月:
\n");
scanf("%s",s2);
strcpy(stu[num].time,s2);break;
case5:
printf("请输入新的地址:
\n");
scanf("%s",s2);
strcpy(stu[num].add,s2);break;
case6:
printf("请输入新的电话号码:
\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2);break;
case7:
printf("请输入新的E-mail地址:
\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2);break;
case8:
return;
default:
printf("请在1-8之间选择\n");
}
}
}
四.调试:
A先编译程序
B再连接程序生成目标
C运行程序
1调试中的主要问题
调试中主要出现的问题:
⑴经常遇到程序执行到某部分就不运行,而编译和链接都成功,说明程序设计上有些问题,语法等并未出错,这时就要去再行考虑设计的程序哪部分考虑不周全。
⑵因为这次使用链表来设计程序,就牵扯到形参和实参的问题。
曾经因为考虑不周全,在自定义函数前的基类出错,导致相关的值未改变,这里就要考虑好形参和实参的问题。
刚开始没有那个初始化函数,程序运行后没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码!
加入初始化函数后,这种现象也随之消失。
在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能。
有时候,忘记定义就直接调用,使得出错。
我这时候才真正体会到了一致性的重要。
检查程序很多遍但却始终不知道输入的数据有错,很令人头疼。
2程序的不足和改进之处
因为用链表来设计一个程序,较复杂,最后没来得及,设计相关的文件存储来实现将数据保存,以致每次运行程序都要重新输入新的数据
改进之处:
可以再考虑编写一个函数,这个函数的功能是将数据写入文件中并保存。
五.测试结果:
程序运行:
主界面:
输入信息
显示
查询
修改
删除
六.结束语:
回想学习C语言的过程中,既有快乐又有烦恼。
从领到书的那一刻,我就很郁闷,C语言到底事学什么的,有什么用。
刚开始上课时,还在迷茫这门课程是用来做什么的。
不过,这些感受都是在对这门课程不了解的情况下产生的。
后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。
尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。
通过一个学期的学习,我掌握了基本知识。
期末,被通知要进行课程设计。
当时有点懵,感觉学的东西很少,很零散,不知该怎么练到一起,就要课程设计,是不是太难为我们了。
通过两周的自学,第二周结束的时候,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。
但是,我们又不得不再次陷入困境。
在整个程序的编写过程中。
最难的就是修改和删除这两个模块,这也是我们要解决的重点问题。
开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。
困难之时,我们组的其他人,帮助了我,完成了修改和删除。
这样的话,整个程序基本上全部完成了,就剩下完善工作了。
我们组写了两个程序,最后,两个程序相互组合,互补,大功告成
虽然设计时完成了,但是我觉得其中还是由一些不足之处:
1.警告句。
程序中缺少一些警告句,例如:
“是否真的删除(y/n)?
”。
2.重名的情况。
由于考虑的不周全,没有设计遇到重名的情况该怎么处理。
整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。
短短的几周课程设计结束了,但是这段时间里,我又学到了更多C知识,如:
对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。
,也看到了团队精神和互帮互助的重要性。
这一点会让我终生受益。
通过这次的课程设计,我觉得自己肚子里的墨水多了,收获也挺大的,这几周过的挺充实!
七.源程序清单:
#include/*I/O函数*/
#include/*其它说明*/
#include/*字符串函数*/
#defineBUFLEN100/*缓冲区最大字符数*/
#defineLEN15/*学号和姓名最大字符数,实际请更改*/
#defineN100/*最大学生人数,实际请更改*/
structrecord/*结构体*/
{
charcode[LEN+1];/*学号*/
charname[LEN+1];/*姓名*/
intage;/*年龄*/
charsex[3];/*性别*/
chartime[LEN+1];/*出生年月*/
charadd[30];/*家庭地址*/
chartel[LEN+1];/*电话号码*/
charmail[30];/*电子邮件地址*/
}stu[N];
intk=1,n,m;/*定义全局变量*/
voidreadfile();/*声明函数*/
voidseek();
voidmodify();
voidinsert();
voiddel();
voiddisplay();
voidsave();
voidmenu();
intmain()
{
while(k)
menu();
system("pause");
return0;
}
voidhelp()/*帮助*/
{
printf("\n1.欢迎使用系统帮助!
\n");
printf("\n2.进入系统后,先刷新学生信息,再查询;\n");
printf("\n3.按照菜单提示键入数字代号;\n");
printf("\n4.增加学生信息后,切记保存按8;\n");
printf("\n5.谢谢您的使用!
\n");
}
voidreadfile()/*建立信息*/
{
char*p="student.txt";
FILE*fp;
inti=0;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("Openfile%serror!
Strikeanykeytoexit!
",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf("录入完毕!
\n");
}
voidseek()/*查找*/
{
inti,item,flag;
chars1[21];/*以姓名和学号最长长度+1为准*/
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
flag=0;
switch(item)
{
case1:
printf("请输入要查询的学生的学号:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("该学号不存在!
\n");break;
case2:
printf("请输入要查询的学生的姓名:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("该姓名不存在!
\n");break;
case3:
return;
default:
printf("请在1-3之间选择\n");
}
}
}
voidmodify()/*修改信息*/
{
inti,item,num;
charsex1[3],s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/
printf("请输入要要修改的学生的学号:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)/*比较字符串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话号码\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜单\n");
printf("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
switch(item)
{
case1:
printf("请输入新的姓名:
\n");
scanf("%s",s2);
strcpy(stu[num].name,s2);break;
case2:
printf("请输入新的年龄:
\n");
scanf("%d",&stu[num].age);break;
case3:
printf("请输入新的性别:
\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1);break;
case4:
printf("请输入新的出生年月:
\n");
scanf("%s",s2);
strcpy(stu[num].time,s2);break;
case5:
printf("请输入新的地址:
\n");
scanf("%s",s2);
strcpy(stu[num].add,s2);break;
case6:
printf("请输入新的电话号码:
\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2);break;
case7:
printf("请输入新的E-mail地址:
\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2);break;
case8:
return;
default:
printf("请在1-8之间选择\n");
}
}
}
voidsort()/*按学号排序*/
{
inti,j,*p,*q,s;
chartemp[10];
for(i=0;i{
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].code,stu[j].code)>0)
{
strcpy(temp,stu[j-1].code);
strcpy(stu[j-1].code,stu[j].code);
strcpy(stu[j].code,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].sex);
strcpy(stu[j-1].sex,stu[j].sex);
strcpy(stu[j].sex,temp);
strcpy(temp,stu[j-1].time);
strcpy(stu[j-1].time,stu[j].time);
strcpy(stu[j].time,temp);
strcpy(temp,stu[j-1].add);
strcpy(stu[j-1].add,stu[j].add);
strcpy(stu[j].add,temp);
strcpy(temp,stu[j-1].tel);
strcpy(stu[j-1].tel,stu[j].tel);
strcpy(stu