VC394 运动会成绩管理系统论文
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
4.1 调试过程中出现的问题及处理方式
在void printlist1(int snum)函数中,当将要输出成绩的学校所在的链表的头结点所指向的下一个结点的地址赋给temp的时候, RE *temp;
temp=&sc[snum-1];
temp=temp->next;
要检测temp是否为NULL,如果为NULL会发生溢出,程序无法向下继续进行
解决的方法是 加上 if(temp==NULL)
cout<<"该学校在该项目上没有取得任何成绩"<<endl;
此句可以有效的防止溢出发生
此类问题还发生在 void printlist2(int snum,int m,int w)和void modlist(int snum,int miterm)里面,在后面的那个函数里面 RE *curr=findlist(snum,miterm);在这个赋值语句后面也要跟上 if(curr==NULL) return; copyright think58 [资料来源:http://THINK58.com]
curr=curr->next;
if(curr==NULL) {
cout<<"该学校在该项目上没有任何成绩记录"<<endl;
return;}
这也是为了防止溢出的发生而设定的条件。 copyright think58 [资料来源:http://think58.com]
在插入结点的时候是将其直接插到该学校所在链表的最后,因此需要找到每个学校所在链表的最后一个结点的地址,而函数RE *findlist(int snum,int fiterm); 只是返回需要查找的结点的地址,不一定是最后一个结点
解决办法是重新定义一个函数,RE *findend(int snum);尽管这样在效率上可能会有些差,因为每次插入的时候都要从头结点开始查找,时间上的开销会大一些,但还是可以解决上述问题的
此外,还有一些就是细节问题了,如:主函数中的
if(num>6||num<0) {
cout<<"输入有误,请重新输入要操作的项目编号"<<endl;
cin>>num;}
这个if语句判断输入的操作编号是否在目录中,如果超出范围重新输入;
还有函数void insertlist(int iterm,int n)里面在用new申请空间的时候为防止内存分配空间错误用下面的语句来监控
if(temp==NULL)
cout<<"内存分配错误"<<endl;
以及函数void insertlist(int iterm,int n)里面在输入学校编号的时候用下面的if语句判断输入的学校编号是否符合要求,如果超出范围重新输入
if(temp->snum>n) {
cout<<"输入的学校编号有误,请重新输入"<<endl; copyright think58 [资料来源:http://THINK58.com]
cin>>temp->snum;}
参考文献
[1] 陈志泊,王春铃. 面向对象的程序设计语言——C++.北京:人民邮电出版社,2004,7
[2] Brian Overland著.董梁,李君成,李自更等译. C++语言命令详解. 北京:电子工业出版社,2000,3
[3] 郑阿奇,丁有和,郑进,周怡君. Visual C++实用教程.北京:电子工业出版社,
2005,6
[来源:http://think58.com]