{ }
FILE *fp;
struct student *head=NULL,*p1=NULL,*p2=NULL;
if ((fp=fopen (\学生成绩管理系统.txt\{ printf (\读取时,文件打开失败!\\n\ return NULL; }
head=p1=(struct student *)malloc (sizeof (struct student )); while (fp != NULL) { if (fread(p1,sizeof (struct student ),1,fp) != 1) break; p1 -> next = (struct student *)malloc (sizeof (struct student )); p2= p1; p1= p1 -> next; }
p2->next = NULL; fclose (fp); return head;
五.测试数据及运行结果
1. 正常测试数据和运行结果
1.按总分排序
2.删除某个学生信息
3. 查找学生信息
2. 异常测试数据及运行
1. 删除信息出现异常
2.修改学生信息出现异常
六.调试情况,设计技巧及体会
1、对自己设计进行评价
1) 不够细心,开始的时候出现很多错误 2) 没有写登录函数
3) 写的过于简短,且大部分都是书上照抄的
2 .调试上得到的体会:在最后的调试过程中,发现有时候系统报错,指出了错误所在的具体位置,可是检查的时候发现该位置并未出错,这样的错误首先要查找前后几行,如果还未检查出错误,那就很有可能在该函数的首部或是主函数的调用语句中出现错误。发现该部分并未出现语法错误,即编译不报错,程序运行后,有时候会出现意想不到的结果,会在想不到的地方跳出程序,甚至不知道程序的什么地方就跳出了,用在不同的地方加不必要的printf语句!以检查是否运行到printf语句。
3.设计上得到的体会:在初步设计时要明确要使用的数据结构和类型,明确设计的基本思想,清楚所写程序的逻辑结构和执行顺序,在调试时才能在出现问题时及时的找到问题的所在.在完成了初步的设计并调试完成后,要进一步优化程序的结构,使程序更简洁,执行效率更高.
总之,第一次完成比较正式的程序,在开始的时候遇到了不少问题,包括怎么排序,怎么添加,怎么查找,怎么删除等一系列问题,但我并没有慌张,而是由一个问题入手,最后
将它们一一攻破,顺利而又艰难的完成了这次任务;通过这次实习,我的编程能力得到了很大的提高,算法思路也比以前清晰多了,基本上掌握了C语言的课程内容,虽然只有为期
两周的实习,但是我的C语言还是得到了进一步的提高。不过要想使自己的水平提高,还有待练习。虽然实习结束了,但是以后在工作中可能会经常使用,这次的实习的确是一个很好的锻炼机会,它一定会使我受益终身的!
七.参考文献
《C语言程序设计》 (第二版), 《数据结构(C语言)》 清华大学出版社
八.附录:
源代码(电子版)
#include
struct student *creat(struct student *p)//创建链表 { struct student *p1 = NULL; p1 = (struct student*)malloc(sizeof (struct student)); p -> next = p1; p1 -> next = NULL; printf(\请输入要添加的学生的信息\\n\ printf(\学号:\ scanf(\ printf(\姓名: \ scanf(\ printf(\数学成绩:\ printf(\英语成绩:\ printf(\成绩:\ scanf(\ p1 -> sum = 0;
p1 -> sum = p1 -> scorem + p1 -> scorec + p1 -> scoree; printf(\总分:%d\ return p1; }
void save1(struct student *p)//将链表从内存保存到文件中 { FILE *fp; if ((fp = fopen(\学生成绩管理系统.txt\ printf(\创建失败!\\n\ while(p != NULL) { fwrite(p,sizeof(struct student),1,fp); p = p -> next; } fclose(fp); printf(\保存成功!\\n\}
void save2(struct student *p)//将以变动的链表信息存入到文件中 { FILE *fp; if ((fp = fopen(\学生成绩管理系统.txt\ printf(\创建失败!\\n\ while(p != NULL) { fwrite(p,sizeof(struct student),1,fp); p = p -> next; } fclose(fp); }
struct student *read()//把文件中的数据读到链表中 { FILE *fp; struct student *head=NULL,*p1=NULL,*p2=NULL; if ((fp=fopen (\学生成绩管理系统.txt\ { printf (\读取时,文件打开失败!\\n\ return NULL; } head=p1=(struct student *)malloc (sizeof (struct student )); while (fp != NULL) { if (fread(p1,sizeof (struct student ),1,fp) != 1) break; p1 -> next = (struct student *)malloc (sizeof (struct student )); p2= p1; p1= p1 -> next; } p2->next = NULL;