if(fwrite(p,sizeof(structstudent),1,fp)!
=1)
{printf("文件写入错误!
\n");
j=1;
}
if(j==0)
printf("已将学生档案保存在stu.dat文件中!
\n");
fclose(fp);
}
修改密码函数:
voidUpdate2(char*pointer1,char*pointer2)//系统密码修改函数
{charpoint[50]="",ch;
intn=0,b=0;
do
{
printf("请输入旧密码:
\n");
for(b=0;b<=50;b++)
{if((ch=getch())!
='\r')
{point[b]=ch;
printf("*");
}
else
break;
}
if(strcmp(point,pointer1)==0)
{do
{n=0;
printf("\n");
printf("请输入新密码:
\n");
for(b=0;b<=50;b++)
{if((ch=getch())!
='\r')
{pointer1[b]=ch;
printf("*");
}
else
break;
};
printf("\n");
printf("请再次输入新密码:
\n");
for(b=0;b<=50;b++)
{if((ch=getch())!
='\r')
{pointer2[b]=ch;
printf("*");
}
else
break;
};
if(strcmp(pointer1,pointer2)!
=0)
{
printf("第二次输入的新密码与第一次输入的新密码不相同,请重新输入!
\n");
n=n+1;
}
}while(n!
=0);
printf("\n");
printf("密码修改成功!
\n");
n=2;
}
if(n==0)
{
printf("\n");
printf("旧密码输入错误!
请重新输入!
\n");
}
}while(n==0);
}
画出函数的调用关系图
main函数的下属子功能函数及其调用示意图:
四.调试分析
进入系统时的界面
系统主菜单
显示记录
保存记录
删除记录
查询记录
修改记录
修改密码
自己对C语言掌握的并不很理想,在进行课程设计的时候,对于用户的需求分析不足,程序在初步调试的时候出了很多问题,还有就是我对一些基本知识理解的不足,后通过老师的指点和同学们的帮助,在规定的时间内我这个程序达到了老师要求实现的功能。
但由于时间匆忙,加上我对编程的基本知识和技巧不熟练,本程序还有一些细节上的问题有待改进。
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。
在用的时候难免出现这样那样的错误。
如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。
解决的这个问题的办法是调整。
再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。
又如:
在设计修改密码时。
当用户发现输入密码错误按了退格键后,因为“*”并没有消去。
导致用户再次按退格键,又出现前面的情况。
最终导致输入密码错误。
一个系统的菜单和提示信息非常重要。
如果没有这些用户根本不知道怎么用你设计的这个系统。
在设计的调试过程中也无法顺利的完成调试工作。
有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。
一周的程序设计和上机调试使我觉得:
一个教好的程序,着眼点应该是为满足用户的需求,要使用户操作起来非常的方便而不必知道程序的原理和功能的具体实现,因此必须有一个友好的用户界面和方便使用的功能操作。
我们在编程的时候应该尽量做到使程序简单,易读,用户界面应尽量做得美观,易于操作。
五.体会
通过C课程设计实验课使我了解到了一个程序开发的过程,虽然规模不大,但为我以后的编程学习打下了基础。
在编程的过程中,我体会到了学习编程的辛苦,为了一个算法的实现而思考,为了一个小小的编译错误而花时间去寻找,这需要很大的毅力和耐心,而且要有良好的思维,这才使得我完成这个任务,也使我感到一分喜悦,毕竟自己完成了一个有模有样的程序。
于此,我也发现自己的一些不足,良好的编程习惯的养成,坚定的毅力和耐心仍是我要加强的,同别人的交流也是必须的,这样才能不断使我进步。
高手们往往是在日日夜夜中磨练出来的,我也要向着更高的方向前进,这是我的梦想。
在这我也感谢老师对我的关怀和帮助,对于她的教学我也很满意。
在此也提出小小的建议:
在学习C的过程中我们先是以理论学习,后是进行上机实践,这也是符合客观规律的,但我认为可以把实践提前,先讲解一些预备知识(能够编出一个或几个小程序)接着就上机实践,让学生知道学的东西有什么用,怎样用,然后在原有基础上加深,譬如在原有程序上改进,增加功能,这也就涉及一些未学的东西,逼着他们自己去学,这时也可以加一些理论讲解,使学生从实践中了解自己需要学习的东西。
这样使同学不会觉得学了一大堆东西不知有什么用处。
以上只是我个人的意见,毕竟没有什么教学经验,在很多方面还没考虑到,希望老师参考。
回顾起此次课程设计,我感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,也把以前所学过的知识重新温故。
在设计中遇到了很多编程问题,最后在几位老师的辛勤指导下,终于游逆而解。
同时,在各老师的身上我学得到很多实用的知识,在次我表示感谢!
六、源程序
#include/*I/O函数*/
#include/*字符串函数*/
#defineN1000/*定义常数表示记录数*/
structstudent//定义结构体
{charname[20];/*姓名*/
intnumber;/*学号*/
charsex;/*性别*/
intage;/*年龄*/
charremarks[100];/*备注*/
}students[N]={"王小名",1,'m',18,"\0","黄小名",2,'m',19,"\0","黎明",3,'m',18,"\0",
"张燕",4,'w',19,"\0","李燕",5,'w',18,"\0","王鹰",6,'m',18,"\0","张飞",7,'m',18,"\0",
"张兰",8,'w',20,"\0","王刚",9,'m',19,"\0","王小燕",10,'w',18,"\0"};/*定义结构体数组*/
//函数声名
voidInsert(int*count_a);/*输入记录*/
voidShow(intcount_b);/*显示记录*/
voidSave(structstudent*p,intn);/*记录保存为文件*/
voidDelete(int*count_c);/*删除记录*/
voidUpdate1(intcount_d);/*修改记录*/
voidSearch1(intcount1);/*按学号查找显示记录*/
voidSearch2(intcount2);/*按姓名查找显示记录*/
voidSearch3(intcount3);/*按性别查找显示记录*/
voidSearch4(intcount4);/*按年龄查找显示记录*/
voidUpdate2(char*pointer1,char*pointer2);/*修改密码*/
intmain()
{
charcode1[50]={"123"},code2[50];
intz1;
chara1;
intcount=0;
printf("\t\t\t********************\n\t\t\t*班级档案管理系统*\n\t\t\t********************\n");
printf("初始密码为:
123\n\n");
printf("请输入密码:
\n");
do
{
for(b=0;b<50;b++)
code2[b]='\0';
for(b=0;b<50;b++)
{
if((ch=getch())!
='\r')
{code2[b]=ch;
printf("*");
}
else
break;
}
if(strcmp(code1,code2)==0)//对输入的密码进行判断
do
{
printf("\n\n");
printf("请选择系统功能项:
\n");
printf("\t\ta.学生基本信息录入\n");
printf("\t\tb.学生基本信息显示\n");
printf("\t\tc.学生基本信息保存\n");
printf("\t\td.学生基本信息删除\n");
printf("\t\te.学生基本信息修改\n");
printf("\t\tf.学生基本信息查询\n");
printf("\t\t\t1.按学号查询\n\t\t\t2.按姓名查询\n\t\t\t3.按性别查询\n\t\t\t4.按年龄查询\n");
printf("\t\tg.退出系统\n\t\th.修改密码\n\n请选择:
\n");
scanf("%s",&a1);
switch(a1)
{
case'a':
Insert(&c