汇编语言课程设计报告 电话簿管理
- 格式:doc
- 大小:176.50 KB
- 文档页数:21
摘要现代社会人与人之间进行通讯的主要工具离不开电话,当打电话给某人时,从电话簿中繁多的信息中查找对应的号码是很繁琐的事情。
根据现代人对快速查找电话簿信息的实际需要,设计了电话号码管理程序。
该程序是典型的信息管理程序,采用M a s m f o r W i n d o w s 为编译环境,D O S为运行环境,核心语言是汇编语言。
本程序主要分为五大模块:选择查找模块,增添模块,修改模块,删除模块和显示模块。
通过需求分析、程序设计、测试等过程,实现了对信息查找、增添、修改、删除和显示功能。
该程序满足了人们翻阅电话簿的实际需求,人们可以通过该电话号码管理程序随时调用电话号码簿,方便自己与他人的沟通,优化了信息配置,提高了生活效率,加速了生活节奏。
关键词:电话簿,信息管理,M a s m f o r W i n d o w s开始登录界面输入操作指令姓名选择号码选择姓名增添号码增添姓名修改号码修改姓名删除号码删除姓名显示号码显示进入对应指令操作项1 选题背景及意义进入21世纪以来,现代社会步入了高速的信息化的时代,人际之间的交往,新闻事件的传播,高科技设备的应用,远程技术操作,都离不开通讯设备。
对于个人而言,最常用的莫过于电话了。
但是伴随电话的普及,杂乱无章的电话号码持续困扰着人们,这反而成了现代高科技、信息化社会下的一块障碍,是快节奏下人们很难避免的一大问题。
随着信息技术的高速发展和各种各样的通讯设备的引入,作为人与人之间通讯的数据库,电话簿也要适应时代的发展。
现代通讯应该利用新的数据管理技术,开发数据管理程序,这样才能在激烈的现代社会中适应高节奏步伐。
2 主要设计内容及预期目标图2-1程序功能模块图本管理程序采用了M a s m f o r W i n d o w s为编译化境,D O S为运行环境,核心语言是汇编语言,使用者可以通过该管理程序灵活使用自己的电话簿,方便使用者。
该程序实施后,能够满足用户对号码选择查找,号码增添,号码修改,号码删除和号码显示进行操作,提高生活效率。
c语言电话簿课程设计一、课程目标知识目标:1. 理解并掌握C语言结构体和数组的使用,能运用其创建电话簿数据结构;2. 学会使用C语言进行文件操作,实现对电话簿数据的保存和读取;3. 掌握C语言中字符串处理的相关函数,实现对电话簿信息的增删查改操作。
技能目标:1. 能够运用所学知识独立设计并实现一个简单的电话簿管理系统;2. 培养学生的编程实践能力,提高问题分析和解决问题的能力;3. 培养学生的团队协作能力,通过分组讨论和合作完成课程设计。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生主动探索计算机科学的热情;2. 培养学生的创新意识,鼓励学生勇于尝试和改进自己的设计方案;3. 培养学生严谨、认真的学习态度,养成良好的编程习惯。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握C语言基础知识的基础上,通过实际项目设计,提高学生的编程实践能力和问题解决能力。
同时,注重培养学生的团队协作精神和情感态度,使学生在完成课程设计的过程中,形成积极的学习态度和价值观。
课程目标分解为具体学习成果,便于后续教学设计和评估。
二、教学内容1. C语言基础知识回顾:结构体、数组、字符串处理函数(教材相关章节)- 结构体的定义和使用;- 数组的定义和操作;- 常用字符串处理函数。
2. 文件操作:文件读写、文件打开与关闭(教材相关章节)- 文件的打开与关闭;- 文件读写操作;- 错误处理。
3. 电话簿管理系统功能设计及实现(课程设计项目)- 系统需求分析;- 功能模块划分;- 编程实现电话簿的增删查改操作;- 文件存储与读取。
4. 课程设计实践:分组讨论、编程实现、测试与优化(教材实践环节)- 学生分组,明确分工;- 编程实践,完成电话簿管理系统;- 测试系统,发现并解决问题;- 优化程序,提高系统性能。
教学内容按照课程目标进行选择和组织,确保科学性和系统性。
教学大纲明确教学内容的安排和进度,结合教材相关章节,让学生在实践中掌握C语言电话簿课程设计所需的知识点。
VC++ 课程实验报告专业班级:学号:报告人:指导老师:C++课程实验报告一、实验题目:电话本管理二、功能描述:这是一个电话簿管理小程序,利用文本文件储存电话簿数据,具有添加、删除、显示和查询联系人电话号码功能。
在这个小型管理程序中,类与类之间通过链表将各个数据相连接,形成一个通畅的应用小程序!在程序中,对于用户需求尽可能的予以满足.三、算法设计与实验步骤四、流程图:进入电话本功能界面电话本功能界面(用户根据界面说明进行选择操作)1添加联系人2显示全部记录3以姓名建立哈希表4以电话号码建立哈5以电话号码查询6退出程序根据提示用户新建联系人姓名和电话号码显示电话薄全部数据再哈希法解决冲突再哈希法解决冲突输入电话号码查询其它信息退出程序五、类与对象结构描述,核心程序代码及相应的注释#include<stdio.h>#include<stdlib.h>#include<string>#define MAXSIZE 20 //电话薄记录数量#define MAX_SIZE 20 //人名的最大长度#define HASHSIZE 53 //定义表长#define LEN sizeof(HashTable)typedef int SET;typedef char Ad[MAX_SIZE];typedef struct //记录{Ad name;Ad tel;Ad add;}Record;typedef struct //哈希表{Record *elem[HASHSIZE]; //数据元素存储基址 int count; //当前数据元素个数 int size; //当前容量}HashTable;SET NUM_BER; //记录的个数void getin(Record* a) //键盘输入各人的信息{printf("要添加通信人信息的个数:\n");scanf("%d",&NUM_BER);int i;for(i=0;i<NUM_BER;i++){printf("请输入第%d个记录的用户名:\n",i+1);scanf("%s",a[i].name);printf("请输入%d个记录的电话号码:\n",i+1);scanf("%s",a[i].tel);printf("请输入第%d个记录的地址:\n",i+1);scanf("%s",a[i].add); //gets(str2);?????? }}void ShowInformation(Record* a) //显示输入的用户信息{int i;for( i=0;i<NUM_BER;i++)printf("\n第%d个用户信息:\n 姓名:%s\n 电话号码:%s\n 联系地址:%s\n",i+1,a[i].name,a[i].tel,a[i].add);}int Hash1(Ad str) //哈希函数{long n;int m;m=n%HASHSIZE; //用除留余数法构造哈希函数return m; //并返回模值}int Hash2(Ad str) //哈希函数{long n;int m;n = atoi(str); //把字符串转换成整型数.m=n%HASHSIZE; //用除留余数法构造哈希函数return m; //并返回模值}SET collision(int p,int &c) //冲突处理函数,采用二次探测再散列法解决冲突{int i,q;i=c/2+1;while(i<HASHSIZE){if(c%2==0){c++;q=(p+i*i)%HASHSIZE;if(q>=0) return q;else i=c/2+1;}else{q=(p-i*i)%HASHSIZE;c++;if(q>=0) return q;else i=c/2+1;}}return -1;}void CreateHash1(HashTable* H,Record* a) //建表,以人的姓名为关键字,建立相应的散列表{//若哈希地址冲突,进行冲突处理int i,p=-1,c,pp;for(i=0;i<NUM_BER;i++){c=0;p=Hash1(a[i].name);pp=p;while(H->elem[pp]!=NULL) {pp=collision(p,c);if(pp<0){printf("第%d记录无法解决冲突",i+1); //需要显示冲突次数时输出continue;} //无法解决冲突,跳入下一循环}H->elem[pp]=&(a[i]); //求得哈希地址,将信息存入H->count++;}printf("\n建表完成!\n此哈希表容量为%d,当前表内存储的记录个数为%d.\n",HASHSIZE,H->count);}void CreateHash2(HashTable* H,Record* a) //建表,以电话号码为关键字,建立相应的散列表{//若哈希地址冲突,进行冲突处理int i,p=-1,c,pp;for(i=0;i<NUM_BER;i++){c=0;p=Hash2(a[i].tel);pp=p;while(H->elem[pp]!=NULL) {pp=collision(p,c);if(pp<0){printf("第%d记录无法解决冲突",i+1); //需要显示冲突次数时输出continue;} //无法解决冲突,跳入下一循环}H->elem[pp]=&(a[i]); //求得哈希地址,将信息存入H->count++;printf("第%d个记录冲突次数为%d。
c语言课程设计通讯录管理系统课程设计报告一、教学目标本课程旨在通过学习C语言通讯录管理系统的设计与实现,让学生掌握C语言编程的基本技能,培养其软件开发的基本思路与方法。
具体目标如下:1.知识目标:–理解C语言的基本数据类型、运算符、控制结构。
–学习C语言函数的定义与调用。
–掌握结构体、文件操作等高级C语言特性。
2.技能目标:–能够运用C语言实现简单的数据结构,如链表、数组。
–培养学生使用C语言进行程序设计的能力,能够独立完成程序编写、调试与优化。
–学会使用C语言实现文件操作,包括文件的读取与写入。
3.情感态度价值观目标:–培养学生对计算机科学的兴趣,增强其自主学习的动力。
–通过项目实践,培养学生的团队协作能力和解决问题的能力。
–引导学生理解技术对生活的影响,培养其对技术发展的责任感。
二、教学内容教学内容选取C语言编程的核心知识点,结合通讯录管理系统的实例进行讲解。
具体内容包括:1.C语言基础:数据类型、变量、运算符、控制结构。
2.函数:函数定义、调用、参数传递、返回值。
3.数据结构:数组、链表、栈和队列。
4.文件操作:文件读写、文件指针。
5.通讯录管理系统实现:结构体定义、系统功能实现、项目管理。
三、教学方法结合C语言特点和通讯录管理系统实例,采用以下教学方法:1.讲授法:系统讲解C语言基础知识和通讯录管理系统的设计理念。
2.案例分析法:通过分析典型代码案例,让学生理解程序设计逻辑。
3.实验法:学生在实验室进行编程实践,巩固理论知识。
4.讨论法:分组讨论问题,培养学生的团队协作和沟通能力。
四、教学资源1.教材:《C程序设计语言》(K&R)、《C Primer Plus》。
2.参考书:《C语言编程思想》、《C语言实践》。
3.多媒体资料:教学PPT、在线编程教程、视频讲解。
4.实验设备:计算机、网络环境、编程环境(如Code::Blocks、VisualStudio)。
五、教学评估本课程的教学评估将综合考虑学生的平时表现、作业、考试等方面,以全面、客观、公正地评价学生的学习成果。
c语言 电话簿课程设计一、课程目标知识目标:1. 掌握C语言结构体和数组的使用,能够创建并操作结构体数组存储电话簿信息;2. 学会使用函数对电话簿进行增删查改等基本操作;3. 了解文件操作,能够实现电话簿数据的持久化存储。
技能目标:1. 培养学生运用C语言解决问题的能力,学会分析实际问题并将其转化为程序设计;2. 提高学生的编程实践能力,能够独立完成一个简单的电话簿管理系统;3. 培养学生的团队协作能力,学会与他人合作共同完成项目。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习和探究的精神;2. 培养学生的创新意识,敢于尝试新技术和方法;3. 增强学生的责任感和使命感,使其认识到编程对现实生活的影响。
分析课程性质、学生特点和教学要求,本课程旨在通过电话簿课程设计,使学生在掌握C语言基础知识的基础上,提高实际编程能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
通过本课程的学习,学生将能够独立完成一个简单的电话簿管理系统,为后续学习更复杂的编程知识打下基础。
二、教学内容1. C语言结构体与数组:- 结构体定义和使用;- 结构体数组创建与操作;- 课本第二章相关内容。
2. 函数:- 函数定义与调用;- 传值调用与引用调用;- 课本第三章相关内容。
3. 电话簿管理系统功能模块:- 新增联系人;- 删除联系人;- 查找联系人;- 修改联系人;- 显示所有联系人;- 课本第四章相关内容。
4. 文件操作:- 文件的打开与关闭;- 文件读写操作;- 课本第五章相关内容。
5. 项目实践:- 分组协作,共同完成电话簿管理系统;- 各组展示项目成果,相互评价;- 结合课本内容,进行实际编程操作。
教学内容安排和进度:第一周:结构体与数组;第二周:函数;第三周:电话簿管理系统功能模块设计;第四周:文件操作与项目实践;第五周:项目展示与评价。
教学内容具有科学性和系统性,确保学生在掌握C语言基础知识的同时,能够逐步学会运用所学知识解决实际问题。
课程设计报告学号:*************名:***学院:信息科学与工程学院专业:电子信息工程班级:0605班指导教师:***一、课程设计目的运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解决问题的能力。
二、设计要求1、能够存储50个电话号码,包括人名(20个字符)、电话号码(8个字符)。
2、系统可以随时接受新的人名和电话号码。
3、具有随时查询号码的功能。
要求输入人名后,在屏幕上显示相应的电话号码。
4、具有删除号码的功能。
要求输入人名后,系统自动删除相应的号码。
5、运行此系统后,要显示菜单选择的功能。
三、程序设计思想每个人的信息包括人名和号码,人名占20个字节,外加一个$字符,电话号码占8个字节,外加一个$字符,所以每个人的信息一共占30个字节。
可以开辟一片连续的存储区,包含30*50即1500个字节,即ZHU DB 1500 DUP(0)。
另外再定义四个需要输入信息的变量,依次为:ZHU1 DB 21,0,21 DUP(0) ;搜索姓名变量ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量ZHU3 DB 9,0,9 DUP(0) ;添加号码变量ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量添加新的人名和号码时,可以通过10号功能调用,先将人名和号码暂时存放在ZHU2和ZHU3中,然后在逐字节地复制到ZHU 中,记住在人名和号码末尾加上$字符。
查询号码时,将输入的要查询的人名存放在ZHU1中,然后再每隔30个字节与ZHU中的人名逐个字符地比较,若完全相等,则将人名下面的号码输出,否则说明要查询的人名不存在。
删除时,先输入要删除的人名,同查询相似,按同样的方法在ZHU中寻找相应的数据区,若找到了,则从找到时下面一个人的信息开始,统一向上移动30个字节,若没有找到,则说明要删除的人名的信息不存在。
四、程序框图五、程序清单DATAS SEGMENTOBF1 DB'Welcome to use this phone book!$'OBF2 DB'Please choose the function buttom(1/2/3):$'OBF11 DB'1 for inputing$'OBF16 DB'2 for searching$'OBF17 DB'3 for deleting$'OBF18 DB'Other for exiting$'OBF3 DB'Please input a new name(within 20 words):$'OBF4 DB'please input the number(within 8 numbers):$'OBF5 DB'Continue to input?(y/n)$'OBF6 DB'Are you sure to end the phone book?(y/n)$'OBF7 DB'Please input a name you want to search(within 20 words):$' OBF8 DB'Got it,it is:$'OBF9 DB'Have not found ,it does not exit!$'OBF10 DB'Continue to search?(y/n)$'OBF12 DB'Please input the name you want to delete(within 20 words):$' OBF13 DB'The name you want to delete does not exit!$'OBF14 DB'Success to delete!$'OBF15 DB'Continue to delete?(y/n)$'ZHU1 DB 21,0,21 DUP(0) ;搜索(查询)姓名变量ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量ZHU3 DB 9,0,9 DUP(0) ;添加号码变量ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量ZHU DB 1500 DUP(0)DATAS ENDSSTACKS SEGMENTDW 32 DUP(0)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV BP,-30BEGIN:CALL NEXTLINEMOV DX,OFFSET OBF1 ;显示菜单选择界面MOV AH,9INT 21HCALL NEXTLINE ;调用换行函数MOV DX,OFFSET OBF2MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF11MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF16MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF17MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF18MOV AH,9INT 21HCALL NEXTLINEMOV AL,0MOV AH,1INT 21HCMP AL,'1' ;选择1,输入信息JE INPUTCMP AL,'2' ;选择2,查询信息JE SEARCHCMP AL,'3' ;选择3,删除信息JE DELETEJMP STOPINPUT: CALL NEXTLINEADD BP,30MOV SI,BPS2:MOV BYTE PTR ZHU[SI],0 ;清除ZHU中最后一个人的信息后面的30 INC SI ; 个字节中非0的单元CMP [SI],0JNE S2MOV SI,BPMOV DX,OFFSET OBF3MOV AH,9INT 21HMOV DX,OFFSET ZHU2 ;输入的人名存放在ZH2中MOV AH,10INT 21HMOV BX,-1S5:INC BX ;为避免ZHU2中刚输入的信息没有完全覆CMP BYTE PTR ZHU2[BX+2],0DH ;盖上一次的信息,将出车符(0DH)及其后JNE S5 ;面的字节归0S6:MOV BYTE PTR ZHU2[BX+2],0INC BXCMP BX,20JNE S6MOV BYTE PTR ZHU2[BX+2],0DHMOV CX,20MOV BX,-1S1:INC BX ;将ZH2复制到ZHU中MOV DL,BYTE PTR ZHU2[BX+2]MOV BYTE PTR ZHU[SI+BX],DLLOOP S1MOV BYTE PTR ZHU[SI+20],'$'CALL NEXTLINEMOV DX,OFFSET OBF4MOV AH,9INT 21HMOV DX,OFFSET ZHU3MOV AH,10INT 21HMOV BX,-1S7:INC BX ;为避免刚输入的号码没有完全覆盖上一次的号码,将这次输CMP BYTE PTR ZHU3[BX+2],0DH ; 入的号码的最后一位的回车符(0DH)换成$ JNE S7MOV BYTE PTR ZHU3[BX+2],'$'ADD SI,21MOV CX,8MOV BX,-1S3:INC BXMOV DL,BYTE PTR ZHU3[BX+2]MOV BYTE PTR ZHU[SI+BX],DLLOOP S3MOV BYTE PTR ZHU[SI+8],'$'CALL NEXTLINEMOV DX,OFFSET OBF5MOV AH,9INT 21HCALL NEXTLINEMOV AH,1INT 21HCMP AL,'Y'JE INPUTCMP AL,'y'JE INPUTJMP BEGINSTOP: CALL NEXTLINEMOV DX,OFFSET OBF6MOV AH,9INT 21HMOV AL,0MOV AH,1INT 21HCMP AL,'Y'JE EXITCMP AL,'y'JNE BEGINEXIT:MOV AX,4C00H ;退出电话本程序INT 21HSEARCH:CALL NEXTLINEMOV DX,OFFSET OBF7 ;输入你要搜索的名字,存放在ZHU1中MOV AH,9INT 21HMOV DX,OFFSET ZHU1MOV AH,10INT 21HMOV BX,-1L5:INC BX ;为避免ZHU1刚输入的信息没有完全覆盖上一次的信息,CMP BYTE PTR ZHU1[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE L5L6:MOV BYTE PTR ZHU1[BX+2],0INC BXCMP BX,20JNE L6MOV BYTE PTR ZHU1[BX+2],0DHCALL NEXTLINEMOV CX,50 ;在ZHU中搜索与ZHU1相等的字符串MOV SI,-30L1:ADD SI,30MOV BX,-1L2:INC BXCMP BX,20JE L3PUSH AXMOV AL,BYTE PTR ZHU[SI+BX]MOV AH,BYTE PTR ZHU1[BX+2]CMP AL,AHPOP AXJE L2LOOP L1MOV DX,OFFSET OBF9 ;没有搜索到MOV AH,9INT 21HJMP L4L3:MOV DX,OFFSET OBF8 ;搜索到了MOV AH,9INT 21HINC BXADD BX,OFFSET ZHUADD BX,SIMOV DX,BXMOV AH,9INT 21HL4:CALL NEXTLINEMOV DX,OFFSET OBF10 ;继续搜索吗?MOV AH,9INT 21HMOV AL,0MOV AH,1INT 21HCMP AL,'Y'JE SEARCHCMP AL,'y'JE SEARCHJMP BEGINDELETE:CALL NEXTLINEMOV DX,OFFSET OBF12 ;输入你要删除的名字,存放在ZHU4中MOV AH,9INT 21HMOV DX,OFFSET ZHU4MOV AH,10INT 21HMOV BX,-1D6:INC BX ;为避免ZHU4刚输入的信息没有完全覆盖上一次的信息,CMP BYTE PTR ZHU4[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE D6D7:MOV BYTE PTR ZHU4[BX+2],0INC BXJNE D7MOV BYTE PTR ZHU4[BX+2],0DHCALL NEXTLINEMOV CX,50MOV SI,-30D1:ADD SI,30MOV BX,-1D2:INC BXCMP BX,20JE D3PUSH AXMOV AL,BYTE PTR ZHU[SI+BX]MOV AH,BYTE PTR ZHU4[BX+2]CMP AL,AHPOP AXJE D2LOOP D1MOV DX,OFFSET OBF13 ;你要删除的姓名不存在MOV AH,9INT 21HJMP D5D3:PUSH AXD4:MOV AL,BYTE PTR ZHU[SI+30]MOV BYTE PTR ZHU[SI],ALINC SICMP [SI],0JNE D4POP AXSUB BP,30MOV DX,OFFSET OBF14 ;删除成功!MOV AH,9INT 21HD5:CALL NEXTLINEMOV DX,OFFSET OBF15 ;要继续删除吗?MOV AH,9INT 21HMOV AL,0MOV AH,1INT 21HCMP AL,'Y'JE DELETECMP AL,'y'JE DELETENEXTLINE PROC ;换行函数MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HRETNEXTLINE ENDPCODES ENDSEND START六、程序测试结果调试以上程序,生成.exe文件后,运行该.exe文件,得到如下结果:图(1)先选择1号功能,即输入信息,得到:图(2)选择n,即返回菜单选择界面,并选择2号功能,即查询信息,得到:图(3)选择n,返回显示菜单选择界面,选择3号功能,即删除信息,得到:图(4)选择n,又回到菜单显示界面,重新查询信息,可以得到:图(5)选择n,返回菜单显示界面,按任意键,得到:图(6)选择n,结束电话本系统。
C语言程序设计课程设计材料学生姓名:学号:系 (院):学院专业:设计(论文)题目: 电话簿管理程序完成日期: 2013年5月指导教师:二○一三年五月本次试验目的:(1)要求学生达到熟练掌握C语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题具体实验内容及步骤一、程序主要功能题目要求的是建立电话簿管理系统,要求通过以下子功能实现:1. 创建有序单向链表;即创建电话簿;2. 分屏显示电话簿中的所有记录;3,在原有电话簿的基础上插入一条记录,并按照顺序排列;4. 删除一条已经存在的记录项;5. 根据用户输入的属性值查找符合条件的记录项;6. (7)输入/输出:可以从件读入已有的电话簿,也可以将通讯录信息输出到文件;8.将链表中的所有结点逆序存放;9.删除链表中姓名,电话,电子邮件均相同的记录0. 退出程序,并释放存储空间。
二、题目分析该题要求对电话簿进行有效管理,因此可用单向链表结构实现。
由题可知要有链表建立、链表输出、结点有序插入、结点删除及数据查询。
1. 创建电话簿在这项功能中,要求我们先建立有序单向链表。
可在主函数中调用创建链表的函数,然后再在创建链表函数中循环调用插入函数,以此实现创建链表。
2. 显示电话簿中的所有记录即为显示所有结点记录。
主函数中调用此函数即可实现。
但此处出现一个问题,即“按<enter>键显示下一屏”。
最后通过循环的嵌套及continue的使用,解决了这个问题。
3. 插入一条节点记录在这项功能中,只需要在主函数中调用此函数即可。
4. 删除节点记录通过主函数中的调用,输入要删除的记录的“编号”,可删除此节点。
此处的问题是需要再删除前确认,才能删除。
最后,通过输入“1”和“0”,来控制删除功能。
5. 查找一个节点记录在主函数中调用此函数,并输入该编号,即可查找到该记录,并删除。
6. 从指定文件添加记录在主函数中输入文件名,然后调用此函数即可。
电话簿管理系统一.程序功能:电话簿管理系统要求实现一个电话薄系统的基本管理功能,包括录入、删除、查找、和导入/导出功能等。
1.创建电话簿;2.#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>struct telebook{ char num[4];char name[10];char phonenum[15];char email[20];struct telebook *next;};typedef struct telebook TeleBook;int menu_select();TeleBook *s;TeleBook *Create();void Display(TeleBook *head);TeleBook *Insert(TeleBook *head,TeleBook *s);TeleBook *Insert_a_record(TeleBook *head);TeleBook *Delete(TeleBook *head,char *num);TeleBook *Delete_a_record(TeleBook *head);TeleBook *Query(TeleBook *head,char *num);void Query_a_record(TeleBook *head);TeleBook *AddfromText(TeleBook *head,char *filename);void WritertoText(TeleBook *head,char *filename);void Quit(TeleBook *head);TeleBook *DeleteSame(TeleBook *head);int menu_select(){ char c;do {system("cls");printf("1. Create List\n");printf("2. Display All Record\n");printf("3. Insert a Reacord\n");printf("4. Delete a Reacord\n");printf("5. Query\n");printf("6. Add Records from a Text File\n");printf("7. Write to a Text File\n");printf("8. Delete the Same Record\n");printf("0. Quit\n");printf("Give your choice (0-8):\n");c=getchar();}while(c<'0'||c>'8');return(c-'0');}TeleBook *Create(){ TeleBook *s,*head=NULL;char c='Y';printf("create an increasing list...\n");printf("please input num,name,phonenum,email\n");while(c=='Y'||c=='y'){ s=(TeleBook *) malloc(sizeof(TeleBook));system("pause");gets(s->num);gets(s->name);gets(s->phonenum);gets(s->email);head=Insert(head,s);printf("Do you want to continue to input :(Y/N)?\n");c=getchar();}return(head);}void Display(TeleBook *head){ TeleBook *p;int i=0;p=head;printf("output list: \n ");printf("num\tname\tphonenum\temail\n");while(p!=NULL){ printf("%s\t%s\t%s\t%s\n",p->num,p->name,p->phonenum,p->email);p=p->next;if(++i%10==0){ printf("\n");system("pause");system("cls");}}}TeleBook *Insert(TeleBook *head,TeleBook *s) { TeleBook *p1,*p2;if(head==NULL){ head=s;s->next=NULL;return(head);}p2=p1=head;while(strcmp(s->num,p1->num)>0 && p1->next!=NULL){ p2=p1; p1=p1->next; }if(strcmp(s->num,p1->num)<=0){ s->next=p1;if(head==p1) head=s;else p2->next=s;}else {p1->next=s;s->next=NULL;}return(head);}TeleBook *Insert_a_record(TeleBook *head){ TeleBook *p;p=(TeleBook *) malloc(sizeof(TeleBook));printf("Please input the new Num,Name,Phonenum,Email\n");getchar();gets(p->num);gets(p->name);gets(p->phonenum);gets(p->email);head=Insert(head,p);printf("Insert success!!\n");printf("%s\n%s\n%s\n%s\n",p->num,p->name,p->phone num,p->email);return(head);}TeleBook *Delete(TeleBook *head,char *num){ TeleBook *p1,*p2;if(head==NULL){ printf("List is null\n" );return(NULL);}p1=head;while(strcmp(p1->num,num)!=0 && p1->next!=NULL){ p2=p1;p1=p1->next;}if(strcmp(p1->num,num)==0){ if(p1==head) head=p1->next;else p2->next=p1->next;printf("The num %s is deleted.\n",p1->num);free(p1);}elseprintf("The num %s is not found.\n",num);return(head);}TeleBook *Delete_a_record(TeleBook *head) { char c;char num[20];printf("Do you want to delete?(y/n)\n");getchar();c=getchar();if(c=='y'||c=='Y')printf("please input num=\n");getchar();gets(num);head=Delete(head,num);printf("delete success!\n");return(head);}TeleBook *Query(TeleBook *head,char *num) { TeleBook *p;p=(TeleBook *) malloc(sizeof(TeleBook));p=head;while(p!=NULL){ if(strcmp(p->num,num)==0) return(p);p=p->next;}return(NULL);}void Query_a_record(TeleBook *head){ char num[10];TeleBook *p;p=(TeleBook *) malloc(sizeof(TeleBook));printf("Please input the num you want to search\n");getchar();gets(num);p=Query(head,num);if(p==NULL) printf("Fail!\n");else{ printf("Search Success!\n");printf("Num:%s\nName:%s\nPhonenum:%s\nEmail:%s\ n",p->num,p->name,p->phonenum,p->email);}}TeleBook *AddfromText(TeleBook *head,char *filename){ FILE *fp;printf("Please input the filename you want.....\n");getchar();gets(filename);fp=fopen(filename,"r");if(fp==NULL){ printf("Can't open the file!\n");getchar();exit(1); }while(feof(fp)==0){ TeleBook *s;s=(TeleBook *) malloc(sizeof(TeleBook));fscanf(fp,"%s%s%s%s",s->num,s->name,s->phonenum,s ->email);head=Insert(head,s);}fclose(fp);printf("Add success\n");return(head);}void WritertoText(TeleBook *head,char *filename){ TeleBook *p;FILE *fp;printf("Please input the filename you want to output.....\n");getchar();gets(filename);if((fp=fopen(filename,"w"))==NULL){ printf("Can't open ");exit(0);}p=head;printf("Output list:\n");while(p!=NULL){ fprintf(fp,"%s\t%s\t%s\t%s\n",p->num,p->name,p->p honenum,p->email);p=p->next;}fclose(fp);printf("Write Successful!\n");}void Quit(TeleBook *head){ TeleBook *p;char c;printf("Do you want to exit? (Y or N)\n");getchar();c=getchar();if(c=='Y'||c=='y'){ while(head!=NULL){ p=head;head=head->next;free(p);}}}TeleBook *DeleteSame(TeleBook *head) { TeleBook *p;TeleBook *p1,*p2;if(head==NULL){ printf("List is null\n");return(NULL);}for(p=head;p!=NULL;p=p->next)for(p2=p,p1=p->next;p1!=NULL;p2=p1,p1=p1->next) {if(strcmp(p->name,p1->name)==0&&strcmp(p->phonenu m,p1->phonenum)==0&&strcmp(p->email,p1->email)= =0){ p2->next=p1->next;free(p1);printf("Delete Success\n");}}return(head);}void main() { TeleBook *head=NULL;printf("\t ******TeleBook*******\n");for(;;){ switch(menu_select()){case 1:printf("\tCreate List\n");head=Create();system("pause");break;case 2:printf("\tDisplay All Record\n");Display(head);system("pause");break;case 3:printf("\tInsert a Reacord\n");head=Insert_a_record(head);system("pause");break;case 4:printf("\tDelete a Reacord\n");head=Delete_a_record(head);system("pause");break;case 5:printf("\tQuery\n");Query_a_record(head);system("pause");break;case 6:printf("\tAdd Records from a Text File\n"); head=AddfromText(head,"filename");system("pause");break;case 7:printf("\tWrite to a Text File\n"); WritertoText(head,"filename"); system("pause");break;case 8:printf("\tDelete the Same Record\n"); head=DeleteSame(head);system("pause");break;case 0:printf("Goodbye!\n");Quit(head);system("pause");exit(0); }}}。
电话簿管理c 课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握电话簿管理C语言的基本概念、语法和操作;技能目标要求学生能够运用C语言编写简单的电话簿管理程序;情感态度价值观目标要求学生培养编程兴趣,提高信息时代下的自主学习能力。
教学目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
在教学过程中,我们将根据课程性质、学生特点和教学要求,明确课程目标,将目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容本课程的教学内容选取电话簿管理C语言作为核心,主要包括以下几个部分:1.C语言基础知识:数据类型、变量、运算符、表达式等。
2.控制结构:顺序结构、分支结构、循环结构等。
3.函数:函数的定义、调用、参数传递、返回值等。
4.电话簿管理模块:通讯录的增删改查功能。
教学内容的选择和确保科学性和系统性,制定详细的教学大纲,明确教学内容的安排和进度。
教材选用《C程序设计原理与应用》,并结合实际案例进行讲解。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。
主要包括:1.讲授法:讲解C语言基本概念、语法和操作。
2.案例分析法:分析实际案例,让学生了解电话簿管理的应用。
3.实验法:引导学生动手实践,编写电话簿管理程序。
4.讨论法:学生分组讨论,培养团队合作能力。
教学方法应多样化,以适应不同学生的学习需求,提高教学效果。
四、教学资源本课程选用《C程序设计原理与应用》作为教材,并提供以下教学资源:1.参考书:推荐学生阅读相关参考书,丰富知识体系。
2.多媒体资料:制作课件、视频等多媒体资料,辅助教学。
3.实验设备:提供计算机实验室,让学生进行上机实践。
教学资源应能够支持教学内容和教学方法的实施,丰富学生的学习体验。
在教学过程中,教师应根据实际情况调整教学资源,以提高教学效果。
五、教学评估本课程的教学评估主要包括平时表现、作业和考试三个部分。
一课程设计题目:电话号码本功能描述:1 程序能够建立一个可存放30条以上记录的电话号码本;2 程序能够对记录进行增加、删除、修改操作;3 记录字段包含序号、姓名、电话、单位内容;4 能够通过姓名、或电话查询记录并显示查询结果;5 退出;二、实验目的:1.进一步了解和熟悉8086 汇编语言的指令及其用法。
2.进一步学习汇编语言源程序的编写方法和技巧以及运行过程。
3.掌握汇编语言调试(在DEBUG状态下)的过程。
三、分析课题的基本内容及目的此课题要求用汇编语言写一个可存放30条以上记录的电话号码本的程序,其中每一个记录应该包括四个选项,即序号,电话号码,姓名用地址。
对程序中的所有记录能够进行的操作有增加一条记录,删除一条记录,查询一条记录,修改一条记录。
增加一条记录就是把记录插入到程序中所有记录的最后面,还要把记录的总个数加1。
删除一记录要先通过查询算法,查找到删除记录的位置,然后从下一条记录开始,逐个往前面覆盖。
查询一条记录有两种方法,通过电话号码或姓名查询,若没有找到所要找的记录,则返回,并告之该记录不存在。
修改一条记录也需要先查找该记录,然后进行修改,即重新写入。
四、程序流程图1.总体流程图:2.插入算法的程序流程图如下:五、设计过程中遇到的问题及解决方法虽然插入算法的流程图比较简单,但也遇到了不少的问题。
1.程序开始运行时,要求用户输入字母以选择要进行的操作。
可以用一段选择程序来实现:w: mov ah,7 ;从键盘输入,但不回显int 21hcmp al,'i' ;将输入值与字母i作比较jnz w1 ;不相等,转向w1与下一个字母比较call insert ;相等,则执行插入操作jmp w ;重新输入进行操作w1: ……2.插入的记录中,姓名和地址的长度不一,这样就给记录的查询、删除及修改带来了很大的麻烦。
这里,我预先定义了一个数组array来设定记录中电话号码,姓名和地址的长度:array db 51 dup(?,16 dup(?),20 dup(?),30 dup(?),0dh,0ah,'$')并且在输入子程序中,运用了以下程序将剩余的单元用空格符填满:mov al,20h ;用空格填满剩余的单元sub ch,chmov cl,numlen ;实际输入的电话号码的长度lea di,numfld ;输入的电话号码单元的首地址add di,cxneg cx ;求补add cx,16 ;cx中为剩余的字节数cld ;let df=0rep stosb ;把al中的内容(空格)存入di指向的内存单元中对于姓名和地址也是一样。
电话薄管理1.课程设计的目的汇编语言是一项实用性很强的技术,只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。
本课程设计通过设计简单的电话薄管理,设计的程序包含俩大块,一个是从已经定义好的指定的数据存储单元中查找信息,还有一个就是要把从键盘上输入的数据填充到数据储存单元当中去。
通过简单的程序,加深学生对汇编程序基本概念的了解,巩固学习成果;还能够提高实际动手能力及对计算机硬件的了解,掌握计算机软件与硬件之间的联系。
为学生后续课程的学习,打下良好的基础。
2.设计方案论证2.1开发环境硬件:2G内存,250G硬盘,ATI HD4500显卡,Inter Core i3CPU。
软件:MASM。
自二十世纪80年代初Microsoft 公司推出MASM 1.0 以来,目前MASM的版本已升至6.15,支持MMX Pentium、Pentium II、Pentium III及Pentium 4指令系统。
MASM 4.0支持80286/80287的处理器和协处理器;MASM 5.0支持80386/80387处理器和协处理器,并加进了简化段伪定义指令和存储模式伪指令,汇编和连接的速度更快。
MASM 6.0是1991年推出的,支持80486处理器,它对MASM 进行重新组织,并提供了许多类似高级语言的新特点。
MASM 6.0之后又有一些改进,微软又推出MASM 6.11,利用它的免费补丁程序可以升级到MASM 6.14,支持到Pentium III指令系统。
2.2总体设计功能定义一个数据存储单元,并且在此数据段后面建立足够空间的缓冲区,以便再存入数据。
可以通过一个主函数来引导程序的运行,主函数中可以根据用户的需求而调用不同的功能,即里面包括主菜单(这是必需的),依据从键盘输入不同的指令而选取不同的子功能,如查找(search proc)和插入(insert proc).查找功能的实现:我们为了方便查找,我们将人名和电话号码各以10个字节(不够补空格)为单位存入数据单元中,并且是号码紧挨着人名排,以便查找,在数据单元的尾段开辟足够空间的缓冲区,以便再存入数据进去,就如我所设计代码中的 buf,buf db 'ji ','54698765 ', ;定义buf存储单元以存储人名和电话号码'liu ','69856456 ','guo ','56566898 ', ;其中人名和电话号码都以10个字节为单位存储'zhang ','569874123 ',20 dup(10 dup (0),10 dup (0));开辟的缓冲区查找可用移动指针来比较实现。
可设计2个指针,SI和DI再存入功能:其思路和查找的有点雷同,也是通过移动指针来实现的,只不过查找时的指针先移在数据单元的表头,而插入时的指针要移在数据单元中的最后已经存入人的电话号码后。
2.3详细设计功能2.3.1主程序功能主菜单:依据从键盘输入不同的指令而选取不同的子功能,如查找(search proc)和插入(insert proc).主菜单流程图2.3.2 查找子程序功能功能:是用于查找从键盘输入人名的所有信息的主程序,内含对输入人名子程序和查找信息的子程序调用查找的子程序 search proc,输入人名的子程序输入电话号码子程序:ipname proc ipnumber proc功能分别为接受从键盘输入的人名信息和号码信息第3章源程序代码DATAS SEGMENTcount db 4buf db 'ji ','54698765 ', ;存储人名和电话号码的数据单元区'liu ','69856456 ','guo ','56566898 ','zhang ','569874123 ',20 dup(10 dup (0),10 dup (0)) ;为再存入数据开辟空间_name db 10, ;缓冲区——键盘输入name字符串?,10 dup(?)num db 10, ;缓冲区——键盘输入num字符串?,10 dup(?)temp db 20dup(?),0dh,0ah,'$' ; 缓冲区——存入人名和电话簿信息menuitem db ' people phonenumber managementsystem',0ah,0dhdb '*********************************************************',0ah,0dh db ' * this is main menu *',0ah,0dhdb ' * 1. query (q) *',0ah,0dhdb ' * 2. insert (i) *',0ah,0dhdb ' * 3. exit (e) *',0ah,0dhdb '*********************************************************',0ah,0dh db 'please select(q,i or e):',0ah,0dh,'$' ;显示主菜单相关信息mess1 db 'name',10 dup(' '),'tel',0ah,0dh,'$'mess2 db 'please Input the name:$'mess3 db 'please Input the telephone number:$'mess4 db 0ah,0dh,'$' ;专门定义一个MESS4,以便在代码中用9号功能调用实现换行mess5 db 'Insert succed!$'err1 db 'there is not exsit the people!',0ah,0dh,'$' ;错误提示信息DATAS ENDSSTACKS SEGMENTdb 2000 dup(?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSmain proc farmov ax,datasmov ds,axmov es,axn1: lea dx,menuitemmov ah,9int 21h ;显示主菜单选择界面mov ah,1int 21h ;从键盘输入字符cmp al,'q'jnz n2call query :若所输字符是‘q‘,则调用子程序 query jmp n1n2: cmp al,'i'jnz n3call insert ; 若所输字符是‘i‘,则调用子程序 insert jmp n1n3: cmp al,'e'jz exitjmp n1exit:mov ah,7int 21hmov ah,4chint 21hret ;退出main endpquery proc near ;查找的主程序push dsxor ax,axpush axmov ax,datasmov ds,axmov es,axcld ;清除方向标志lea dx,mess4mov ah,9int 21h ;换行lea dx,mess2mov ah,9int 21hcall ipname ;调用子程序 ipname,从键盘上输入人名 lea dx,mess4mov ah,9int 21hcall search ;具体查找的子程序mov ah,7int 21hretquery endpipname proc near ;从键盘输入名字lea dx,_name ;存放待查找的人名地址mov ah,10int 21hmov bh,0mov bl,_name+1 ;bl 存放从键盘输入的字符串长度mov cx,10sub cx,bx ;计算剩下的长度r:mov _name[bx+2],20h ;剩下的地方补空格inc bxloop rretipname endpsearch proc nearlea di,buf ;di 中存放表首地址push dimov bl,countmov bh,0l:lea si,_name+2mov cx,10repe cmpsb ;比较 si 和bi的前10个字节jz n4 ;不相等时不跳转pop diadd di,20 ;di 偏移地址加20push didec bxjnz llea dx,err1 ;提示‘找不到。
‘信息mov ah,9int 21hjmp n1n4:pop dimov si,dilea di,tempmov cx,20rep movsb ; 将人名和号码信息传入 temp lea dx,mess1mov ah,9int 21hlea dx,tempmov ah,9int 21h ;输出temp中的人名和号码 retsearch endpinsert proc nearlea dx,mess4mov ah,9int 21hlea dx,mess2mov ah,9int 21hlea dx,mess4mov ah,9int 21hcall ipname ;调用输入人名的子程序lea dx,mess4mov ah,9int 21hlea dx,mess3mov ah,9int 21hcall ipnumber ;调用输入号码的子程序cldmov al,20mov cl,countmul cl ;ax 存放 buf里已有数据的字节数lea di,bufadd di,ax ;将di移动指向数据单元中的已经存入的最后人的电话后lea si,_name+2mov cx,10rep movsb ;将 si 中数据(人名)传 di中lea si,num+2mov cx,10rep movsb ;再传数据(号码)到 di中inc count ; count 加一条记录lea dx,mess5mov ah,9int 21hlea dx,mess4mov ah,9int 21hmov ah,7int 21hretinsert endpipnumber proc near ;从键盘输入号码lea dx,num ;存放待存入的电话号码mov ah,10int 21hlea dx,mess4mov ah,9int 21hmov bh,0mov bl,num+1 ; bl 存放从键盘输入的字符串长度 mov cx,10sub cx,bxc1: mov num[bx+2],20h ;补空格inc bxloop c1retipnumber endpcodes endsend main ;程序结束第 4章使用说明由于本人是在 ASM 即 MASM for windows集成环境下编写的代码,所以就以在此环境下为准,介绍一下此环境下使用发法:1.生成可执行文件后,运行该程序,随即我们进入主菜单显示界面,示图如下:2.可按界面提示输入。