




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京理工大学VC课程设计报告课 程:VC+课程设计 系 别:计算机科学与计算机学院班 级:学 号:姓 名:选题2名称: 同学录系统选题2 难度系数: A自报成绩:优秀起止时间:8.23-11.30指导教师: 陆建峰日期: 2010 年 9 月 24 日目 录 一、 课题目标1.1 程序功能简介1.2 课程设计要求1.3 评定难易级别二、 具体实现2.1 程序总体方案2.1.1开发平台2.1.2程序结构或流程图2.2 关键代码及注释三、 程序截图四、 调试报告(在设计和实现过程所遇到的问题和解决,请如实填写)五、 总体小结(在整个设计过程中的心得体会)六、 分工介绍 (是独立完成还是合作完成,若为合作完成,说明合作者以及之间的具体分工)一、课题目标1.1 程序功能简介此程序是一个简单的同学录系统,具有导入同学信息,存储,显示、新增、删除、查询、修改同学信息等功能,最主要的是,它是用双向链表实现的,所以新增和删除的效率非常的高。其菜单分为:显示所有同学录信息、新增一个同学录信息、删除一个同学录信息、查询系统、修改同学录信息,寻求帮助等。1.2 课程设计要求用双向链表完成一个同学录系统实现同学录所该有的功能,并方便用户的使用!1.3 评定难易级别 A组二、具体实现2.1 程序总体方案2.1.1开发平台操作系统:Windows 7开发工具:visual studio 20102.1.2程序结构或流程图主函数的流程图:开始读入TXT欢迎界面显示菜单新增信息显示所有删除操作寻求帮助退出修改系统查询系统姓氏查询缺省查询记忆查询返回是否先查询储存入TXT2.2 所做改进 2.2.1改进一 改进方案 基本上这个程序都是自己写的,改进也只是对原有要求的添加而已。先说说这个程序怎么实现所有功能的吧。 具体实现进入程序,首先是读取txt文件的信息,然后显示的是菜单。再然后一目了然的有各种功能。总体是用双向链表做的。新增结点信息:即添加一个链表结点信息。显示所有信息:是先根据学号排序,然后从头至尾分屏显示所有信息,链表依次读取。删除操作: 即链表操作,删除一个结点.查询操作: 按要求进行各种情况查询,总体思想是线性的比较,如果有匹配的字符串就输出(这里面用的是string.find函数)。修改同学录: 先根据查找操作找到这个信息,再修改当前结点信息寻求帮助: 作为一些运用该程序的说明而存在。可以对用户一些较常见的疑问做出回答。退出程序: 退出前会保存所有的信息至txt文件。2.2.2改进二 改进方案为了使我的查询更完善,我的程序做到了部分字符串匹配的查询方式,即比如在输入姓名查询的时候,如果输入的是姓名的姓或者名,那么与之匹配的所有信息都会显示,而不是显示结果不存在。同样的,还可以根据自己一开始对该同学的评价做查询。另外,我设置了帮助选项,可以为用户解答很多常见的疑问。可以方便用户。 具体实现运用STL string类里面的find( )函数;把我的成员全都定义成string类的,最后再让用户输入所需查找的字符串(也是一个string类),然后从到之为用find函数查,如.find(temp)!=string:npos;则加入到输出。在所有的查询方式里使用相同的方法,即可实现,所有的查询都带有子串查找功能。STL确实方便三、程序运行截图进入程序:进入菜单:分屏显示查询界面:修改同学录信息:帮助界面:四、调试报告调试还算顺利,只是一开始容错方面做得比较简陋。后来改好了。再又就是一开始功能比较少,后来慢慢一步步完善,变成现在这样,还算可以用用的程序。五、总体小结经过这么多天的编程,我了解到了要想完成一个比较大的程序,需要先根据程序的要求,确定设计思路,画出流程图,把想要用到的函数都写出其函数原型说明。然后根据自己已经写好的函数原型说明。一步步把函数都实现。即分别写出每一个功能所需要的具体的函数。这样,有一个清晰的思路,就比较有调理,有了调理,也不容易忘记一些想要实现的东西。然后,才会有一个层次分明,客户友好的程序。另外,类的封装和双向链表弄起来还是比较繁琐的。但是,把问题一个个搞清楚以后,问题就自然而然的被简化了。另外编程序还要注重细节,任意一个看似细微的的错误,都可能会引起一连串的error,所以每次从键盘读入数据或者数据的处理的环节都要注意合法性的检查。最后不得不提的是,我加入ACM队,在暑假做了大量的题目联系,所以在调试方面没有出现什么打问题,都算是比较轻松的过关了。熟练的写程序,对我们着实是非常重要的!六、分工介绍独立完成。#pragma once#includestudent.hstruct node /链表node结点student &stu;node *next;node *prev;node(student & s):stu(s);class guanlipublic:node * head_ptr;node *tail_ptr;node * current_ptr;guanli(void);guanli(void);void UserChoice(int);/用户选择void InsertRecord();/插入信息void InsertNode(node *);/插入新结点void InsertNodeAtHead(node*);/插入头结点void InsertNodeAtEnd(node*);/插入尾结点void ShowList();/显示所有信息void ShowSortedList1();/显示排序后链表1void ShowSortedList2();/显示排序后链表2void DeleteRecord();/删除某条记录void DeleteNodeAtHead();/删除头结点void DeleteNodeAtEnd();/删除尾结点void DeleteNodeAtMiddle();/在中间删除void DeleteNode();/删除某个节点void ChangeMes();/修改信息函数bool VerifyDelete();/确认删除void DeleteList();/释放链表,保存至文件void SearchChoice();/选择查找方式void ASearchByName();/A方式中的名字查找void ASearchByStuNum();/A方式中的学号查找void ASearchByDormNum();/A方式中的整个宿舍查找void BSearchByStuNum();/B方式,按学号显示个人详细信息void LoadFile();/读取文件void SaveFile();/存至文件void Help();/帮助提示函数void UserInput();/用户输入备用;#include guanli.h#includeusing namespace std;guanli:guanli(void)guanli:guanli(void)void guanli:UserChoice(int t)switch(t)case 0:InsertRecord();/添加结点(OK)break;case 1:ShowList();/显示所有结点信息(OK)break;case 2:DeleteRecord();/删除记录 (OK)break;case 3:SearchChoice();/查找记录(OK)break;case 4:ChangeMes();break;case 5:Help();/帮助文件break;case 6:SaveFile();if(head_ptr!=NULL)DeleteList();break;default :cout选择无效,请重新输入: ;break;void guanli:InsertRecord()char tt15;char temp_memory300;student *s=new student;node * new_ptr=new node(*s);if(new_ptr!=NULL)system(cls);coutnew_ptr-stu.fri_name;coutnew_ptr-stu.e_mail;coutnew_ptr-stu.sex;coutnew_ptr-stu.phone_num;coutnew_ptr-stu.memory;InsertNode(new_ptr);cin.ignore(20,n);cout是否继续添加?Y/Nendl;char te30;cin.getline(te,30);if(!strcmp(te,Y)|!strcmp(te,y)InsertRecord();elsecoutnext=new_ptr;new_ptr-prev=new_ptr;head_ptr=new_ptr;tail_ptr=new_ptr;return;/只有一个节点if(head_ptr-next=head_ptr)if(new_ptr-stu.fri_namestu.fri_name)InsertNodeAtHead(new_ptr);else InsertNodeAtEnd(new_ptr);return ;/多个节点,自动按姓名排序插入if(head_ptr-next!=head_ptr)current_ptr=head_ptr-next;while(new_ptr-stu.fri_namecurrent_ptr-stu.fri_name)/比较姓名进行排序&(current_ptr!=head_ptr)/并且当前结点不是头结点(双向链表的头尾是相连的)current_ptr=current_ptr-next;/继续向后拓展结点if(current_ptr=head_ptr)InsertNodeAtEnd(new_ptr);/插入在链表尾elsetemp_ptr=current_ptr-prev;/此时,插入的结点在current结点和temp结点之间temp_ptr-next=new_ptr;new_ptr-prev=temp_ptr;current_ptr-prev=new_ptr;new_ptr-next=current_ptr;void guanli:InsertNodeAtEnd(node*new_ptr)new_ptr-next=head_ptr;tail_ptr-next=new_ptr;new_ptr-prev=tail_ptr;head_ptr-prev=new_ptr;tail_ptr=new_ptr;void guanli:InsertNodeAtHead(node *new_ptr)new_ptr-next=head_ptr;new_ptr-prev=tail_ptr;head_ptr-prev=new_ptr;tail_ptr-next=new_ptr;tail_ptr=new_ptr;#include guanli.h#include#includeusing namespace std;void guanli:ShowList()system(cls);int n;coutn;system(cls);int i;current_ptr=head_ptr;if(current_ptr!=NULL)do i=1;coutsetw(14)姓名setw(8)性别setw(30)邮箱setw(20)电话号码endlendl;docoutsetw(14)stu.fri_namesetw(8)stu.sex;coutsetw(30)stu.e_mailsetw(20)stu.phone_numnext;i+;while(current_ptr!=head_ptr&i=n);coutendlendl;if(current_ptr!=head_ptr)system(pause);system(cls);else cout文件结束!endl;while(current_ptr!=head_ptr);elsecout同学录为空!endl;system(pause);system(cls);void guanli:SearchChoice()char n;coutendl输入数字键选择你所要进行的操作:endlendl;coutttt1:姓名查询endlendl;coutttt2:姓名缺省查询(姓氏,名字部分查询)endlendl;coutttt3:记忆片段查询endlendl;coutttt4:退出查询endlendl;cout输入你的选择:n;while(n!=4)switch(n)case 1:ASearchByStuNum();break;case 2:ASearchByName();break;case 3:ASearchByDormNum();break;default :cout对不起,您输入的查询方式尚未做出,请重新输入: ;break;cout输入0显示菜单,输入5退出查询,其他任意键继续查询:pp;if(pp=0)coutendl输入数字键选择你所要进行的操作:endlendl;coutttt1:姓名查询endlendl;coutttt2:姓名缺省查询(姓氏,名字部分查询)endlendl;coutttt3:记忆片段查询endlendl;coutttt4:退出查询endlendl;cout输入你的选择:n;else if(pp=4)n=4;system(cls);void guanli:ASearchByStuNum()system(cls);bool nFlag=0;string search_str;current_ptr=head_ptr;if(current_ptr=NULL)cout学生记录为空endl;elsecin.ignore(20,n);coutsearch_str;if(current_ptr-stu.fri_name=search_str)nFlag=1;cout姓名:stu.fri_namet性别:stu.sex;coutt电话:stu.phone_numt邮箱:stu.e_mailendl;cout珍贵回忆:nstu.memorynext;while(current_ptr!=head_ptr)if(current_ptr-stu.fri_name=search_str)nFlag=1;cout姓名:stu.fri_namet性别:stu.sex;coutt电话:stu.phone_numt邮箱:stu.e_mailendl;cout珍贵回忆:nstu.memorynext;if(!nFlag)/搜索完所有结点都没发现cout无记录!endl;system(pause);system(cls);void guanli:ASearchByName()system(cls);bool nFlag=0;string search_str;current_ptr=head_ptr;if(current_ptr=NULL)cout同学录为空endl;elsecin.ignore(20,n);coutsearch_str;if(current_ptr-stu.fri_name.find(search_str)!=string:npos)if(!nFlag)cout找到记录n;nFlag=1;cout姓名:stu.fri_namet性别:stu.sex;coutt电话:stu.phone_numt邮箱:stu.e_mailendl;cout珍贵回忆:nstu.memoryendlnext;while(current_ptr!=head_ptr)if(current_ptr-stu.fri_name.find(search_str)!=string:npos)if(!nFlag)cout找到记录n;nFlag=1;cout姓名:stu.fri_namet性别:stu.sex;coutt电话:stu.phone_numt邮箱:stu.e_mailendl;cout珍贵回忆:nstu.memoryendlnext;if(!nFlag)/搜索完所有结点都没发现cout无记录!endl;system(pause);system(cls);void guanli:ASearchByDormNum()system(cls);bool nFlag=0;string search_str;current_ptr=head_ptr;if(current_ptr=NULL)cout学生记录为空endl;elsecin.ignore(20,n);coutsearch_str;if(current_ptr-stu.memory.find(search_str)!=string:npos)if(!nFlag)cout找到记录n;nFlag=1;cout姓名:stu.fri_namet性别:stu.sex;coutt电话:stu.phone_numt邮箱:stu.e_mailendl;cout珍贵回忆:nstu.memoryendlnext;while(current_ptr!=head_ptr)if(current_ptr-stu.memory.find(search_str)!=string:npos)if(!nFlag)cout找到记录n;nFlag=1;cout姓名:stu.fri_namet性别:stu.sex;coutt电话:stu.phone_numt邮箱:stu.e_mailendl;cout珍贵回忆:nstu.memoryendlnext;if(!nFlag)/搜索完所有结点都没发现cout无记录!endl;system(pause);system(cls);#include guanli.h#include#includeusing namespace std;void guanli:DeleteRecord()system(cls);string search_string;node *previous_ptr=NULL;current_ptr=head_ptr;if(current_ptr=NULL)cout没有你要删除的记录!endl;return;cin.ignore(20,n);int nFlag=0;bool ask=0;char n30;couttt是否需要先根据查找来查看所要删除的同学完整姓名?Y/Nendl;cin.getline(n,30);if(!strcmp(n,y)|!strcmp(n,Y)SearchChoice();coutsearch_string;while(current_ptr-stu.fri_name=search_string)&head_ptr!=NULL)nFlag=1;coutn找到记录n;cout姓名:stu.fri_namet性别:stu.sex;coutt邮箱:stu.e_mailt电话:stu.phone_numendl;cout珍贵回忆:nstu.memoryendl;if(VerifyDelete() /向用户询问是否真的要删除DeleteNode();coutn记录已删除!n;elsecout姓名为:stu.fri_namet的记录没有删除next;doif(current_ptr-stu.fri_name=search_string)nFlag=1;coutn找到记录n;cout姓名:stu.fri_namet性别:stu.sex;coutt邮箱:stu.e_mailt电话:stu.phone_numendl;cout珍贵回忆:nstu.memoryendl;if(VerifyDelete() /向用户询问是否真的要删除DeleteNode();coutn记录已删除!n;elsecout姓名为:stu.fri_namet的记录没有删除next;while(current_ptr!=head_ptr|head_ptr=NULL);if(!nFlag)coutn没有找到相符的记录也没有删除记录。n;cin.get();system(cls);void guanli:Help()help:char choice2;system(cls);cout欢迎使用“帮助”,请输入帮助类型:n;cout1:此程序有哪些功能?endl;cout2:如何一次性删除所有记录?endl;cout3:此程序关闭后我的记录存在哪里?为什么我修改的记录没有被保存?endl;cout4:为什么有时候我的程序会突然死掉?endl;cout5:何时会有更完善的版本出现?endl;cout6:此程序的作者信息?endl;cout7:退出帮助。choice2;switch(choice2)case 1:cout此程序为一个同学录系统,由双向链表实现。endl;cout具体的话可以查看菜单。endl;cout谢谢您使用本程序!endl;system(pause);system(cls);goto help;break;case 2:cout请退出本程序后手动删除一个名为xuejiguanli.txt的文件,谢谢endl;system(pause);system(cls);goto help;break;case 3:cout在一个名为xuejiguanli.txt的文件里面endl;cout只有正常关闭才会保存,在运行途中强行关闭,程序将不对原有文件做任何修改endl;system(pause);system(cls);goto help;break;case 4:cout目前本程序在输入有误方面的容错处理可能还不够完善,有时输入太多非法数据可能导致程序死机;cout所以,请规范您的操作,并注意输入的正确,谢谢您的配合。endl;system(pause);system(cls);goto help;break;case 5:cout下一届课程设计必然有更强大的学弟学妹来完善它。endl;system(pause);system(cls);goto help;break;case 6:coutAuthor:计科三班,孙健波。n学号:0906840330n;cout谢谢您的使用endl;system(pause);system(cls);goto help;break;default:system(pause);break;bool guanli:VerifyDelete()char v100;coutnext=head_ptr)DeleteNodeAtEnd();elseDeleteNodeAtMiddle();void guanli:DeleteNodeAtHead()if(head_ptr-next!=head_ptr)head_ptr=current_ptr-next;tail_ptr-next=head_ptr;head_ptr-prev=tail_ptr;delete current_ptr;current_ptr=head_ptr;elsehead_ptr=NULL;tail_ptr=NULL;delete current_ptr;void guanli:DeleteNodeAtEnd()node*previous_ptr=current_ptr-prev;delete current_ptr;previous_ptr-next=head_ptr;head_ptr-prev=previous_ptr;tail_ptr=previous_ptr;current_ptr=tail_ptr;void guanli:DeleteNodeAtMiddle()node*previous_ptr=current_ptr-prev;previous_ptr-next=current_ptr-next;current_ptr-next-prev=previous_ptr;delete current_ptr;current_ptr=previous_ptr;void guanli:DeleteList()node*temp_ptr;current_ptr=head_ptr;dotemp_ptr=current_ptr-next;tail_ptr-next=temp_ptr;temp_ptr-prev=tail_ptr;delete current_ptr;current_ptr=temp_ptr;while(temp_ptr!=NULL&temp_ptr!=tail_ptr);delete current_ptr;#include guanli.h#include#include#include#includeusing namespace std;void guanli:SaveFile()fstream outfile;outfile.open(classmate.txt,ios:out);if(outfile)current_ptr=head_ptr;if(head_ptr!=NULL)dooutfilesetw(14)stu.fri_namesetw(30)stu.e_mail;outfilesetw(5)stu.sexsetw(20)stu.phone_numt;outfilestu.memorynext;while(current_ptr!=head_ptr);outfile文件结束endl;outfile.close();elsecout打开文件出错!new_ptr-stu.fri_name;if(new_ptr-stu.fri_name!= )&(new_ptr-stu.fri_name!=文件结束)infilenew_ptr-stu.e_mail;infilenew_ptr-stu.sex;infilenew_ptr-stu.phone_num;infilenew_ptr-stu.memory;infile.ignore(20,n);InsertNode(new_ptr);elsedelete new_ptr;e_loop=1;elsecout!警告:没有成功地从磁盘导入文件。endl;e_loop=1;while(!e_loop);infile.close();elsecout没有可用的数据文件,记录表为空。endl;void guanli:ChangeMes()/system(pause);string search_string;if(head_ptr=NULL)cout链表为空,无记录!endl;return;int nFlag=0;coutttt修改记录需要输入同学姓名nnttt是否需要查找学生的学号?(Y/N):;char n30;cin.getline(n,30);if(!strcmp(n,y)|!strcmp(n,Y)SearchChoice();current_ptr=head_ptr;cin.ignore(20,n);coutsearch_string;student *s=new student;node*new_ptr;while(current_ptr-stu.fri_name=search_string)&head_ptr!=NULL)node * new_ptr=new node(*s);nFlag=1;coutn找到记录n;cout姓名:stu.fri_namet性别:stu.sex;coutt邮箱:s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度离婚协议样本(子女抚养权、赡养金及财产分割详细规定)
- 2025年中医养生技术传承与创新发展合作合同
- 2025年度跨国游艇销售与共同开发项目合同
- 2025版全新木门定制生产及供应链管理服务合同
- 2025版天津存量房买卖合同智能家居系统升级及优化协议
- 2025版智能化国内货物公路运输服务合同模板
- 2025版基础设施投资融资顾问全面合作协议
- 2025版气象信息数据采集与共享合同
- 2025年旅游项目居间合作合同协议书
- 2025年体育地产项目股权收购与转让协议
- 2025年北师大版新教材数学二年级上册教学计划(含进度表)
- 2025年职业技能鉴定-油品储运调和操作工-油品储运调和操作工(高级技师)历年参考题库含答案解析(5套)
- 初中语文学科组质量分析
- 2025年电抗器行业当前市场规模及未来五到十年发展趋势报告
- 新班主任自我介绍课件
- 2025广西中考英语真题(原卷版)
- 餐饮行业食品安全管理实务培训教材
- 反歧视艾滋病课件
- 2025年广告设计师专业知识考核试卷:2025年广告设计与制作软件应用实战试题
- 供应商保价协议合同范本
- 2025-2030中国乒乓发球机行业市场运营模式及未来发展动向预测报告
评论
0/150
提交评论