单位员工通讯录管理系统线性表的应用C语言课程设计毕业设计.docx
- 文档编号:5823405
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:53
- 大小:325.72KB
单位员工通讯录管理系统线性表的应用C语言课程设计毕业设计.docx
《单位员工通讯录管理系统线性表的应用C语言课程设计毕业设计.docx》由会员分享,可在线阅读,更多相关《单位员工通讯录管理系统线性表的应用C语言课程设计毕业设计.docx(53页珍藏版)》请在冰豆网上搜索。
单位员工通讯录管理系统线性表的应用C语言课程设计毕业设计
单位员工通讯录管理系统-线性表的应用-C语言课程设计-毕业设计
计科111苏中华201100814129
数据结构课程设计实验报告
1.单位员工通讯录管理系统(线性表的应用)*********************
2.停车场管理(栈和队列的应用)*******************************3.哈夫曼编码/译码系统(树应用)******************************4.教学计划编制问题(图的应用)*******************************5.药店的药品销售统计系统(排序应用**************************
6.综合排序(**)*******************************************7.迷宫求解***************************************************8.总结*******************************************************9.源代码*****************************************************
1
计科111苏中华201100814129
一(单位员工通讯录管理系统(线性表的应用)1.设计题目:
单位员工通讯录管理系统(线性表的应用)2.问题描述:
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号。
其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
3.需求分析:
随着社会的发展,越来越多的工厂建立。
为了便于管理单位员工和方便员工之间的交流,员工的各项信息的统计,查询和修改,删除等显得很重要。
基于上面的种种原因,在学习过数据结构课程和其他编程语言的基础上编成了一个单位员工通讯录管理系统,便于单位对员工的管理和员工间的交流。
4.算法设计:
本程序使用的数据结构中的线性表中的知识,在C语言的基础上编的。
首先,应该建立一个单链表,链表的节点信息表存的有单位员工的编号,姓名,手机号码和办公室电话,然后我们就可以添加员工的各项信息了。
在建立好员工信息的表后我们还可以进行员工信息的查询操作,在进行查询时我们首先要信息删除操作,此操作首先要找到要删除的员工信息,然后将此节点的前一节点的后续指针直接指向要删除的结点的后续指针,并且释放要删除的结点空间即可。
员工信息修改,首先找到要修改的员工,然后输入要修改的员工信息,将输入信息直接覆盖在原有信息上即可。
员工信息输出,遍历整个链表并输出。
初始化函数:
LinkListCreat()
查找函数:
voidSearch(staff*l)
删除函数:
voidDelete(staff*l)
修改函数:
voidChange(staff*l)
利用头插法插入函数voidInsert(staff*l){staff*p;
printf("**插入通讯录记录**\n");
p=(staff*)malloc(sizeof(staff));
printf("\n请输入员工信息:
\n");
printf("员工编号:
");
scanf("%d",&p->num);
printf("员工姓名:
");
scanf("%s",p->name);
printf("手机号码:
");
scanf("%d",&p->phone);
printf("电话号码:
");
scanf("%d",&p->call);
2
计科111苏中华201100814129
p->next=l->next;//头插法
l->next=p;
printf("****插入成功!
***\n");
}
五(测试结果
测试数据:
编号姓名手机电话
01苏12345123
02王23456234
03胡345673451.界面
2.新建通讯录
3
计科111苏中华2011008141293.查询
4.插入
5.修改
6.删除
4
计科111苏中华201100814129
二、停车场管理(栈和队列的应用)1(设计题目:
停车场管理(栈和队列的应用)
2(问题描述
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
3.需求分析:
由于现在车辆越来越多,基本上所有的公共场所都有停车场,便于人们的出行。
当车辆过多的时候,仅仅需要人工指挥是不可能的,所以就必须有更加完善的停车管理系统来保障车辆的正常停放。
因此开发出了这一个相对来说更完善的管理系统。
4(算法思想和算法设计
本系统是在C++语言的基础上,结合数据结构中的栈和队列的应用编程的。
以栈模拟停车场,以队列模拟车场外的便道。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。
首先定义栈的顺序存储结构和队列的链表结构同时定义栈顶指针top以及栈底指针base。
然后初始化栈,同时定义在停车时停车时间time和所需费用money的关系。
当车A进入的时候栈顶元素加1,当车B进入的时候栈顶元素加1,但是由于空间不足,当车C进入的时候则显示停车场已满,进入便道~同时输入车辆的信息,只有当A,B两辆车中有一量出站的时候C方能进入。
当便道上的车辆进入的时候同时队列元素减1.
5
计科111苏中华201100814129停车实现函数:
voidtingche(SqStack&S,LinkQueue&L){inttime1;charmingz[10];
if(S.top-S.base<4){
cout<<"请输入车辆信息"< cout<<"车牌号: ";cin>>mingz; strcpy(S.top->name,mingz); cout<<"所需的停车时间: ";cin>>time1; S.top->time=time1; S.top->money=S.top->time*5;S.top++;}else {L.rear->next=newQNode; cout<<"停车场已满,请进入通道等待。 "< cout<<"请输入进入车辆的信息"< cout<<"车牌号: ";cin>>mingz; strcpy(L.rear->next->car,mingz); L.rear=L.rear->next;L.rear->next=NULL;}}出车函数实现: voidchuche(SqStack&S,SqStack&q,LinkQueue&L) {charchu[10];q.base=q.top=q.stop; cout<<"请输入出车的牌号: ";cin>>chu; S.top--;while(strcmp(S.top->name,chu)){ *(q.top)=*(S.top);q.top++;S.top--;} cout<<"停车时间: "< cout<<"停车费用: "< 6 计科111苏中华201100814129 q.top--;while((q.top-q.base)>=0){ *(S.top)=*(q.top);S.top++;q.top--;} if(L.front->next! =NULL){inttime2; cout<<"便道车辆向停车场转移;"< cout<<"转移的车辆为: "< cout<<"请输入所需的停车时间: ";cin>>time2; strcpy(S.top->name,L.front->next->car); S.top->time=time2;S.top->money=S.top->time*5;S.top++; L.front->next=L.front->next->next;}} 五(测试结果 测试数据: 车牌号A23时间5车牌号B56时间10车牌号T12时间10 7 计科111苏中华201100814129 三、哈夫曼编码/译码系统(树应用)1(设计题目: 哈夫曼编码/译码系统(树应用)2(问题描述: 现在要求编写一程序模拟传输过程,实现在发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。 3.需求分析: 由于通讯信息的简洁性和保密性,就需要对传输的内容进行处理,然后到达接受者的手中之后再进行必要的解码。 哈弗曼编码译码系统就是这样一个处理并翻译信息的系统。 利用利用哈夫曼编码进行通信,可以压缩通信的数据量,提高传输效率,缩短信息的传输时间,还有一定的保密性。 4.算法思想和算法设计 本程序是用最优二叉树即哈夫曼树来实现哈夫曼编码译码器的功能。 假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长度为(W1*L1)+(W2*L2)+„+(Wi*Li)。 若将此对应到二叉树上,Wi为叶结点,Li为根结点到叶结点的路径长度。 那么,(W1*L1)+(W2*L2)+„+(Wi*Li)恰好为二叉树上带权路径长度。 因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码 该系统将实现以下几大功能: 从文件中读取字符串,建立哈夫曼树,哈弗曼编码以及哈夫曼译码等。 从硬盘读取字符串的函数: voidOpen(chars[]) { charname[10]; FILE*fp; inti=0; printf("请输入要打开的文件名: "); gets(name); if((fp=fopen(name,"rt"))==NULL) { printf("打开失败~\n"); exit (1); } 8 计科111苏中华201100814129 s[i++]=fgetc(fp); while(s[i-1]! =EOF) s[i++]=fgetc(fp); s[i]='\0'; fclose(fp); } 保存函数: voidSave(chars[]) { charname[10]; FILE*fp; printf("请输入要保存的文件名: "); gets(name); if((fp=fopen(name,"wt"))==NULL) { printf("存储失败~"); exit (1); } fputs(s,fp); printf("\n保存成功,文件名为: %s。 \n",name); printf("\n按回车键继续..."); getchar(); fclose(fp); } 编码函数: voidHFMCode(HFMTreeHT,CodeNodeHC[],charstr[]) { inti;HFMTreeq,p=HT; for(i=0;i HC[i].ch=str[i];HC[i].code[n-1]='\0';} for(i=0;i HC[i].start=n-1;for(q=p;q->Parent;q=q->Parent) if(q==q->Parent->LChild) 9 计科111苏中华201100814129 HC[i].code[--HC[i].start]='0'; elseHC[i].code[--HC[i].start]='1'; p=p->next;}} 译码函数: voidDeCoding(charcode[],HFMTreeHT,charstr[],chars[]) { inti,j,k=0; HFMTreeroot,p,q; for(root=HT;root->Parent;root=root->Parent); for(i=0,p=root;code[i];i++){ if(code[i]=='0') p=p->LChild;elsep=p->RChild; if(p->LChild==NULL&&p->RChild==NULL){for(j=0,q=HT;q! =p;q=q->next,j++); s[k++]=str[j];p=root;}}s[k]='\0';} 五(测试结果 程序界面 编码及保存 10 计科111苏中华201100814129 译码及保存 四(教学计划编制问题(图的应用)1(设计题目: 教学计划编制问题(图的应用) 2(问题描述: 大学的每个专业都要制定教学计划。 假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。 每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。 每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。 每门课恰好占一个学期。 在这样的前提下设计一个教学计划编制程序。 3.需求分析: 11 计科111苏中华201100814129 随着素质教育的实施,大学里开设的课程也越来越多。 每个课程并不是单独的,他们之间都有着不同的联系。 教学计划编制也就成了一个难题,不仅要求课程的排列适合课程的需要,也应该考虑学生的接受能力和时间的安排。 运用数据结构中图的应用可以很快的解决这个问题。 4.算法思想和算法设计 通过有向图的定义和图的基本性质,进行设计。 我们可以将所以的课程编制成一张图,然后遍历图。 由于课程有前续后继的关系,所以用AOV网是最合适。 对AOV网进行拓扑排序即可以得出结果。 对AOV网进行拓扑排序有两种情况: 广度优先和深度优先。 首先确定学期数和每学期的学分总数上限,不能一学期将很多课全部学完。 然后根据输入的计划课程树和输入的拓扑排序所形成的课程先修关系建立拓扑图。 有向图G采用邻接表存储结构。 若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则返回ERROR。 5(测试结果 五(药店的药品销售统计系统(排序应用) 12 计科111苏中华2011008141291(设计题目: 药店的药品销售统计系统(排序应用)2(问题描述: 设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。 在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。 各药品的信息包括: 药品编号、药名、药品单价、销出数量、销售额。 药品编号共4位,采用字母和数字混合编号,如: A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。 对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。 在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法 3.需求分析: 药品销售系统可以实时记录药品销售的数目,单价以及按照药品的编号,销售量的排序,更加方便了药品的管理。 4.算法思想和算法设计: 首先从txt文件中读取数据信息并保存,本次试验采用了5中排序方法。 其中编号排序是按照基数排序,采用多关键字进行排序。 对单价的排序采用了直接插入排序和冒泡排序,直接插入排序就是首先将第一个元素看成是一个有序的,然后第二个元素和第一个比较,若大于第一个则放在其后面否则放前面,依次直至最后一个。 冒泡排序就是采用两个循环,即将第一个元素和第二个比较若第一个大于第二个则交换,否则不变,然后第二个和第三个比较,同上。 第一趟可将最大的一个放在最后,依次可得排序。 销售量是快速排序,快速排序就是首先设置一个关键字,然后让最后一个和其比较,直至找到一个比关键字小的,然后和其交换,接下来让第一个和其比较,直至找到一个比其大的,然后交换,在找到的位置分别做标记,依次执行即可。 单价冒泡排序: voidBubbleSort(SequenList&L){ inti,j; DataTypetemp; for(i=0;i for(j=1;j 13 计科111苏中华201100814129 { if(L.r[j].price>L.r[j+1].price) { temp=L.r[j]; L.r[j]=L.r[j+1]; L.r[j+1]=temp;}}cout<<"按单价排序后的结果是: "< for(i=1;i {cout< 销售量快速排序 intPartition(SequenList&L,intlow,inthigh){intpri; L.r[0]=L.r[low]; pri=L.r[low].count; while(low {while(low L.r[low]=L.r[high]; while(low L.r[high]=L.r[low];} L.r[low]=L.r[0]; returnlow;} voidQsort(SequenList&L,intlow,inthigh){intp; if(low {p=Partition(L,low,high); 14 计科111苏中华201100814129 Qsort(L,low,p-1); Qsort(L,p+1,high);}} voidQuickSort(SequenList&L) {Qsort(L,1,L.length-1); cout<<"按销售量排序后的结果是: "< for(inti=1;i {cout< 5.测试结果: 六(排序综合(**) 1(设计题目: 排序综合(**) 2(问题描述: 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 (1)至少采用三种方法(希尔排序、快速排序、堆排序)实现上述问题求解; (2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法; (3)统计每种算法所用的比较次数和交换次数,最后列表显示;3.需求分析: 15 计科111苏中华201100814129利用随机产生的整数,通过数据结构中的排序知识进行排序,并统计每种方 法的所用的时间。 找出最快的两种方法。 4.算法思想和算法设计 首先利用随机数发生器的初始化函数随机产生两千个整数。 然后分别以直接 插入排序,直接选择排序,冒泡排序,快速排序,堆排序对随机产生的2000整 数进行排序。 排序的同时记录所需的时间。 冒泡排序算法 voidBubbleSort(inta[],intp)/*冒泡排序算法*/{ inti,j,temp; for(i=0;i for(j=N-1;j>i;j--)/*比较,找出本趟最小关键字的记录*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单位 员工 通讯录 管理 系统 线性 应用 语言 课程设计 毕业设计