c++语言程序设计课程设计。
通讯录管理系统。
二〇一一年六月。
一. 程序功能。
1. 增加记录内部要按照当前排序标志tag插入结点,插入结点后,链表仍然保持有序。
2. 删除记录输入待删除记录的姓名,显示该姓名下的所有信息,让用户确认是否要删除。
3. 显示所有记录按顺序显示所有记录,每显示10条记录,暂停,用户按键继续。
4. 按姓名查找并显示一个记录输入姓名,显示该姓名下的所有信息。
5. 按姓名查找,修改一个记录用户输入姓名,系统显示该姓名下的所有信息,同时显示子菜单,用户按子菜单提示,指定修改哪一个数据项。
6. 从正文文件中批量添加数据到库表中用户可事前建立一个正文文件,存放待加入的数据,然后从该文件中一次性导入多个人员的数据。程序运行时,用户需输入正文文件的文件名。
7. 将库表中的数据写入正文文件将库表中的数据写入一个正文文件中。程序运行时,用户需输入正文文件的文件名。
8. 排序首先显示当前排序关键字,然后提示是否需要改变,用户根据需要回答是否需要改变。系统中有两种排序方式,一种按姓名,一种按办公室**排序。
改变排序方式的意义是在两种排序方式之间切换。
9. 退出系统退出系统,内部做结尾工作。
二. 遇到的问题及解决办法。
1. 理清思路。
在刚开始拿到这个课程实际课题时,本以为只是把以前学过的只是一个简单的集合,可事实却是要将它们融会贯通起来。首先经常遇到对象的私有成员在主函数中无法顺利调用的情况,这是整体的问题,我就一遍一遍检查各个函数,最后找到了症结所在。
2. 排序函数。
在编程的过程中,遇到的最大的问题就是整体重新排序函数的编写,是在编写的过程中,发现书本上的插入结点函数的功能不足以实现整体排序,于是便在排序函数中调用插入函数以实现整体重新排序的功能。核心是创建新结点,有序插入后删除原结点。首先将p指针指向头指针指向的空间,即指向该链表,再让头指针为空。
循环中让p1和p2也指向p指向的结点,将p2指向的结点(即头结点),插入到空链表中,令p指向下个结点,而后删除p1的空间。
3. 文件读入与提取。
对于二进制文件的处理在学习的过程中,对课本知识掌握的并不是非常的稳固,所以在编程时遇到了很长大的困难,更不用说自动保存和读取了。面对这种情况我选择回归书本,刻苦钻研了课本上所写的知识点之后,果然进展比较顺利了,顺利完成了比较困惑的过程。
4. 程序的运行和调试。
在所有程序完成之后的调试过程中也遇到了很过问题,面对一连串的错误只有一个个的修改,其中比较大的问题就是输入姓名和**的输入方式不一样导致两个一起输出,所以我便在中间加了个便解决了这个问题。
三. 感想和心得。
在编程之前原先构想了一下编程的过程觉得应该和以前学过的编程并不是太不一样,但是实际开始的时候才发现差别真的很大。首先要将各个不同的函数结合在一起还要运用到类得定义,所以开始感觉困难有点大。
遇到的第一个问题就是排序函数的编写,其次又遇到了二进制文件的写入与读取的问题,最终都得以成功解决。在编程时遇到了一个又一个的问题,然后又一个一个地被我解决了,这是让我无比欣慰的。
c++是一门严谨的学科,需要非常端正的态度,一句一句的自己编写而后调试,看着自己的程序从几十行编程后来的几百行,心中自然是充满了成就感。这种细致严谨的态度用在生活上对我们也是很有帮助的,希望借此可以在科学的道路上走下去。
四. 源程序。
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
class node //结点类。
char name[10姓名。
int officephone办公室**。
int homephone住宅**。
char mobilephone[15]; 手机号码。
char email[20email地址。
node * next下一结点指针。
public:
node(char n[10]="0",int o=0,int h=0,char m[15]="0",char e[20]="0") 构造函数,各参数均有缺省值。
void show() 显示结点数据。
void setname(char *n)//修改姓名。
void setofficephone(int *o)//修改办公室**。
void sethomephone(int *h)//修改住宅**。
void setmobilephone(char *m)//修改手机号码。
void setemail(char *e)//修改email地址。
char *getname取姓名。
int getofficephone取办公室**。
int gethomephone取住宅**。
char *getmobilephone取手机号码。
char *getemail取email地址。
node *getnext取下一结点指针。
friend class addrlist;//将addrlist类说明为友元类。
class addrlist
node *headptr;//链表首指针。
node *tailptr;//链表尾指针。
int tag;//排序状态标志,当tag=1,表示按姓名排序;默认按姓名排序。
当tag=2,表示按办公室**排序;
public:
addrlist()/构造函数,创建空链表,将tag的值置为1
void addtail(node *p)//将p指向的结点加入到链表尾部。else
void addsort(node *p)//将p指向的结点按tag指定的顺序插入到链表中。
elseif(tag==1)//按姓名顺序插入。
if(strcmp(headptr->name,p->name)==1)//插在链表首部。
p->next=headptr;
headptr=p;
return;
p2=p1=headptr;//插在链表中部或尾部。
while(p2->next&&strcmp(p->name,p2->name)==1)//查找待插入位置。
p1=p2;
p2=p2->next;
if(strcmp(p->name,p2->name)==1)//插在链表尾部。
p2->next=p;
p->next=null;
else插在链表中间,p2之前。
p->next=p2;
p1->next=p;
return;
elseif(tag==2)//按办公室**顺序插入。
if((headptr->officephone)>(p->officephone))/插在链表首部。
p->next=headptr;
headptr=p;
return;
p2=p1=headptr;//插在链表中部或尾部。
while(p2->next!=null&&(p->officephone)>(p2->officephone))/查找待插入位置。
p1=p2;p2=p2->next;}
if((p->officephone)>(p2->officephone))/插在链表尾部。
p2->next=p;
p->next=null;
else插在链表中间,p2之前。
p1->next=p;
p->next=p2;
return;
node*lookup(char *name)//按姓名查找结点,返回该结点指针。
return null;
void delete(char *name)//删除指定姓名的结点。
p1=headptr;
while((!strcmp(p1->name,name)==0)&&p1->next!=null))/查找待删除结点。
C 课程设计
自动走迷宫小游戏。根据课堂讲授内容,做相应的自主练习,消化课堂所讲解的内容 通过调试典型例题或习题积累调试c 程序的经验 通过完成辅导教材中的编程题,逐渐培养学生的编程能力 用计算机解决实际问题的能力。同时在设计的过程中发现自己的不足之处,对以前所学过的知识理解的更加深刻,掌握得更加牢固。迷宫生成。...
c 课程设计
哈尔滨 课程设计报告。课程 c 学号 姓名 班级 教师 1.管理系统的功能说明。课程信息管理 能够增加数据,删除数据,显示数据,修改数据,按姓名和首字母查询数据和一些基本的程序功能。2.存储数据的描述。coursenumber 课程号coursename 课程名subject 所属专业xingzhi...
C课程设计
面向对象程序设计课程设计。一 设计要求。1 课程设计以3 4人为一组,每人一个模块 2 课程设计时间为1周 在处理系统的时候,要从分析系统的需求入手,根据系统需求进行详细分析,明确系统功能,然后设计系统整体架构以及划分系统模块,按照模块分配小组中每个组员的具体任务,完成设计。二 系统设计规范。1 命...