c语言个人通信录管理系统课程设计报告
更新时间:2024-07-02 01:44:01 阅读量: 综合文库 文档下载
高级语言程序设计报告
(个人通信录管理系统)
院 系:班 级:成 员: 时 间:
通信与信息工程学院 通信工程1104班 杨文刚(1107020420)
李 岩(1107020421) 王皓升(1107020417) 罗 洋(1107020418) 沈 洋(1107020419) 王志旭(1107020422)
2012年7月2日
基于链表的个人通信录管理系统课程设计任务书
课 程 设 计 情 况 课程设计名称 基于链表的个人通信录管理系统 指导教师姓名 职称 需学生数 6人 组长 杨文刚 成员 李岩、王皓升、罗洋、王志旭、沈洋 各 成 员 主 要 负 责 内 容 杨文刚 负责主体函数框架建立和函数模块整合 李 岩 负责程序的添加模块 王皓升 负责程序的删除模块 王志旭 负责程序的查找模块 罗 洋 负责程序的输出模块 沈 洋 负责程序的输入模块 程序的调试和测试由小组成员共同参与完成 课程设计的报告撰写由杨文刚、李岩完成
目 录
1.设计目的???????????????????1
2.总体设计???????????????????2
3.详细设计???????????????????3
4.程序调试与测试 ?????????????????5
5.程序清单与执行结果 ???????????????6
5.1 程序清单????????????????????????6 5.2 程序执行结果??????????????????????14
6.课程设计总结??????????????????20
- 1 -
1.设计目的
1.1 问题描述
编写一C语言程序,其功能是建立一个基于链表的个人通信录管理系统,个 人通信录进行建立、输出、添加、查找及删除运行结果进行打印等相关操作。
1.2 问题分析
首先,选择合适的存储结构构造个人通信录,对该程序可以分为几个模块进行分析,每个模块在该程序中的作用进行了解。最后用设计连接图将各模块之间的联系连接起来,以方便我们更容易理解。
然后,该程序需要一个详细的设计流程图来表示各个步骤所完成的先后顺序,(如,对个人通信录进行添加,查找输出打印结果)。
最后,按流程图进行编写个人通信录的程序,输出结果,并将打印的结果显示出。
1.3 设计分析
本次实验设计主要是建立个人通信录,要实现个人通信录的建立,个人通信录的查找,个人通信录的添加及个人通信录的删除功能。.
设计需求上我们需要掌握以下几点:
(1).设计部分
1. 写出本次实验的详细设计方案。 2. 画出该次程序的流程图。
3. 分析该次程序的程序清单,进行程序测试并输出运行结果。 4. 对该次程序中个函数的功能分析结果。 5. 对该次实验完成后有总结。
(2).设计大纲
1. 了解, 分析这次实验的主要问题。 2. 讨论解决问题的方案。 3. 分配组员的个人任务。
4. 进行各部分的整合、修改、完善。 5. 进行这次实验的总体报告实验总结。
- 1 -
2.总体设计
2.1 程序设计组成框图
个人通信录 建立模块 个人通信录输出模块 个人通信录添加模块 图1 个人通信录删除模块 个人通信录查找模块 主函数模块 个人通信录 2.2 流程图
开始 菜单选择 否 建立 是 输出 是 添加 是 删除 是 查找 是 按身份证号查找 否 否 否 否 信息输入 信息输出 信息添加 信息删除 信息查找 结束 - 2 -
3.详细设计
3.1 模块功能说明
3.1.1 通信录建立模块
创建链表,并返回表头指针 {
创建新节点;
while (判断读入编号) {
读入联系人信息; 保存到指定的域; 指针指向下一新节点; } }
3.1.2通信录输出模块
{
按指定格式输出通讯录表头信息; if(头指针不为空) {
按指定格式输出联系人信息;记录联系人数; } else
通信录为空;
}
3.1.3 通信录添加模块
{
新建节点;
屏幕提示输入要添加的联系人信息;读入联系人信息; 按联系人编号升序排序; }
- 3 -
3.1.4 通信录删除模块
{
提示输入要删除的联系人编号; 读入编号信息; if(找到)
{输出找到的联系人信息; 询问是否删除该联系人; } else
提示没有该联系人; }
3.1.5 通信录查找模块
{
提示输入要查找的联系人身份证号;读入身份证号信息; If(找到)
显示查找到的联系人信息; else
提示没有该联系人; }
- 4 -
4.程序调试与测试
参照教材编写完程序的各个模块后,我们将各个模块和主函数整合,运行之后主要存在以下几个问题:
1. 程序输出信息部分不正确
运行程序,输入通信录中联系人信息后,程序输出的电话号码和身份证号信息错误,有时还会出现负数。经过查找发现在读入联系人信息时,这两项采用了长整型数据类型,但是长整型最大支持的值仍然小于电话号码和身份证号的值。我们换用字符串类型读入信息后为问题解决。
2. 结束联系人信息的输入(以数字0结束)存在问题
运行程序,我们在输入联系人信息完毕后是用数字0结束的,但是当我们输入完信息后,得将下一个联系人的所有信息全部输入为数字0时,程序才会结束输入。针对这个问题我们修改了输入模块的循环体顺序,让程序先判断输入的联系人编号是否为0,是0时结束输入,不是0时继续读入联系人信息。这样在我们结束输入时只需按一次0即可结束输入。
3. 联系人的查找存在问题
我们在查找(用身份证号)联系人时,当我们输入通信录中存在的联系人的身份证号时,程序能准确查找到该联系人;但当我们输入的身份证号信息在通信录中不存在时,程序会非法结束。为此,我们请教了老师,修改了if语句中的判断条件,程序能够在我们输入的身份证号信息不存在时正常提示“通信录中没有该联系人”,问题解决。
因为我们的程序是根据教材中的程序编写的,所以在调试过程中,程序没有出现大的错误,在模块连接上也没有问题,只是有一些输入输出以及一些循环体上的错误。
- 5 -
5.程序清单与执行结果
5.1 程序清单
/*主控菜单程序*/ #include \#include \#include \
struct per /*定义结构体类型*/ { };
struct per *jianli(); /*声明建立通信录函数*/ void shuchu(struct per *head); /*声明输出通信录函数*/ struct per *tianjia(struct per *head); /*声明添加联系人函数*/ struct per *shanchu(struct per *head); /*声明删除联系人函数*/ struct per *chazhao(struct per *head); /*声明查找联系人函数*/ struct per *head=NULL;
void main() /*主函数*/ {
long int num; char name[20]; char tel[12]; char mail[30]; char add[50]; long int mnum; char id[18]; struct per *next;
int select; int pass1; int pass=123456;
printf(\欢迎使用个人通信录管理系统,请输入登录密码:\scanf(\if(pass==pass1) { do{
- 6 -
printf(\登录成功!\\n\\n\
printf(\欢迎进入个人通信录管理系统 ******************\\n\
/*主控菜单*/
printf(\建 立 通 信 录 <<-----------------\printf(\输 出 通 信 录 <<-----------------\printf(\添 加 联 系 人 <<-----------------\printf(\删 除 联 系 人 <<-----------------\printf(\查 找 联 系 人 <<-----------------\printf(\退 出 系 统 <<-----------------\\n\printf(\
printf(\请选择(0---5):\
scanf(\printf(\
switch(select) /*对应模块函数*/ { case 1:
head=jianli();break;
case 2:
shuchu(head);break;
case 3:
head=tianjia(head);break;
case 4:
head=shanchu(head);break;
case 5:
head=chazhao(head);break;
case 0:
break;
default: }
printf(\您的输入有误,请重新输入(0---5):\\n\
}while(select!=0); } else
printf(\对不起,您输入的密码不正确,请按任意键退出程序!!!\\n\\n\
- 7 -
}
/*建立通信录函数*/
struct per *jianli() /*创建链表,并返回表头指针*/ {
struct per *head; /*表头*/ struct per *p1; /*新建节点*/ struct per *p2; /*表尾节点*/ long int num1; char name1[20]; char tel1[12]; char mail1[30]; char add1[50]; long int mnum1; char id1[18];
head=NULL; /*无任何节点,表头指向空*/
printf(\请输入联系人编号、姓名、电话、身份证号、邮箱、地址及邮编(用空格分隔,
用0结束)\\n\
scanf(\
while(num1!=0) /*假设num=0表示输入结束*/ {
scanf(\读入
第一个联系人的信息*/
p1=(struct per *)malloc(sizeof(struct per)); /*新建一个节点*/ p1->num=num1; /*存入联系人的信息*/ strcpy(p1->name,name1); strcpy(p1->tel,tel1); strcpy(p1->id,id1); strcpy(p1->mail,mail1); strcpy(p1->add,add1); p1->mnum=mnum1;
p1->next=NULL; /*将next域置为空,表示尾节点*/
- 8 -
}
}
if(head==NULL)
head=p1; /*第一个新建节点是表头*/
else
p2->next=p1; /*原表尾的下一个节点是新节点*/
p2=p1; /*新建节点成为表尾*/ scanf(\
return head; /*返回表头指针*/
/*输出通信录函数*/
void shuchu(struct per *head) {
struct per *p;
int n=0; /*统计节点数,即联系人数*/
printf(\通*******信*******录*******************\\n\printf(\编号\姓名\电话号码\身份
证号\邮箱\地址\邮编\ */
printf(\
{
if(head!=NULL) {
for(p=head;p!=NULL;p=p->next) /*如果到达尾节点退出循环,否则继续
ail,p->add,p->mnum);
} else
- 9 -
}
n++;
printf(\联系人总数:%d\\n\\n\
}
printf(\对不起,该通信录中没有任何联系人!\\n\\n\
/*添加联系人函数*/
struct per*tianjia(struct per*head) {
struct per*p; struct per*p1; struct per*p2; p2=head;
p=(struct per*)malloc(sizeof(struct per)); /*新建节点p*/ printf(\请输入要添加的联系人的编号、姓名、电话、身份证号、邮箱、地址、邮编:\\n\scanf(\
>mnum);
printf(\成功添加联系人%s !\\n\if(head==NULL) { } else {
while((p->num>p2->num)&&(p2->next!=NULL)) /*查找添加位置*/ { }
if(p->num<=p2->num) /*从小到大排列,添加至表内*/ {
if(p2==head) {
- 10 -
head=p; p->next=NULL;
p1=p2; p2=p2->next;
}
}
}
}
head=p; p->next=p2;
else { }
p1->next=p; p->next=p2;
else /*添加至表尾*/ { }
p2->next=p; p->next=NULL;
return(head);
/*删除联系人函数*/
struct per * shanchu(struct person*head) {
struct per *p2; struct per *p1; int num1,n;
printf(\请输入要删除的联系人编号:\根据输入信息查找联系人*/ scanf(\if(head==NULL) { }
- 11 -
printf(\通讯录为空\\n\\n\return(head);
p2=head;
while(num1 != p2-> num && p2->next !=NULL) { }
if(num1==p2->num) {
printf(\成功查询到该联系人!\\n\
printf(\编号\姓名\电话号码\p1=p2; p2=p2->next;
身份证号\邮箱\地址\邮编\
printf(\
->mail,p2->add,p2->mnum); }
- 12 -
}
printf(\确定删除? 1确定 0取消 \scanf(\switch(n) { case 1: {if(p2==head)
head=p2->next;
else
p1->next=p2->next;
free(p2);
printf(\成功删除编号为%ld的联系人!\\n\\n\case 0: }
printf(\您取消了删除任务,联系人未被删除!\\n\break;
else
printf(\对不起,该通信录中没有任何联系人!\\n\\n\
return(head);
/*查找函数*/
struct per *chazhao(struct per *head) {
struct per*p2; char id1[20];
printf(\请输入要查找的联系人身份证号:\\n\scanf(\if(head==NULL) { } p2=head; while (p2) {
if(strcmp(p2->id,id1)==0)
{ printf(\成功查询到该联系人!\\n\
printf(\编号\姓名\电话号printf(\通讯录为空\\n\\n\return(head);
码\身份证号\邮箱\地址\邮编\
printf(\
p2->mail,p2->add,p2->mnum);
} if(!p2)
printf(\对不起,该通信录没有该联系人!\\n\\n\ }
p2=p2->next;
break;
return (head); }
- 13 -
5.2 程序执行结果
5.2.1 密码登录界面
5.2.2 密码输入错误界面
- 14 -
5.2.3 成功登录主界面
5.2.4 建立通信录
- 15 -
5.2.5 输出通信录
5.2.6 添加联系人
- 16 -
5.2.7 添加后输出通信录
- 17 -
5.2.8 成功查找联系人
5.2.9 找不到联系人时界面
- 18 -
5.2.10 删除询问界面
5.2.11 确认后成功删除联系人
- 19 -
6.课程设计总结
通过这次的课程设计使我们充分了解了个人通信录的建立、输出、添加、删除、查找的基本原理,并可以编写出其程序。虽然说程序不是很完美的,但是总体上完成了老师的要求,当然这只能相对于我们这些初学者来说。除了课本上仅有的知识外,我们还借用了一些其他书上比较好的算法思想,以至于让我们的课程设计更加完美。
在这次课程设计中,让我们深知仅仅掌握课本上的知识是远远不够的。在刚开始编程时,让我们感觉到自己不知道应该从哪里下手。在操作时,常常会遇到一些棘手的问题难以解决,但经过我们组员的不断思考、共同努力,尝试着去更改出现问题的程序,直至程序可以正常运行输出。开始很困难,但在老师和同学们的帮助下,我们了解了很多操作,使后面变得更容易操作。 程序设计过程中,小组中的各成员快速行动,积极配合,分工合作,在完成了各自的函数模块程序的编写后,有积极参与程序的调试与测试,并快速的发现和解决了问题,过程中遇到了查找模块的问题,我们请教了老师,在老师的帮助下,我们解决了查找模块的问题。至此,我们的程序能够保证成功并且正确的运行。
- 20 -
参考文献
《C程序设计(第二版)》 谭浩强 清华大学出版社
《C语言程序设计》 田祥松 西安电子科技大学出版社
《C语言课程设计》 黄明等 电子工业出版社 《C语言时尚编程百例》 网冠科技 机械工业出版社 《标准C机能百练》 焦 华 中国铁道出版社
正在阅读:
c语言个人通信录管理系统课程设计报告07-02
01_实验一 熟悉实验开发环境及GPIO编程-16101206-15
2018年七年级语文上册第二单元8世说新语二则练习03-15
难忘的争吵作文600字06-16
廖俊松公共政策教案01-21
生本课堂教学设计06-01
微生物工程实验指导200903-04
基于Agent的智能网络教学模型03-08
高三年级第一学期工作计划08-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 个人通信
- 管理系统
- 语言
- 课程
- 报告
- 设计
- 北大新闻学考研难度介绍
- 人教版小学语文五年级上册教材分析
- 中南大学 专升本《高等数学》在线作业二参考答案 2
- 岱岳区旅游规划
- 2014变电安装强制性条文执行检查表
- 2018年初中八年级地理上册第一单元测试题及答案
- 其他粮食加工品生产许可证审查细则(2006版)
- 2018年杭州市西湖区中考一模语文试卷及答案
- 画法几何考试重点(北航北海)
- 佛山市三水区西南街道永业路10号地号为1007392工业用地土地使用
- 哈工大课程设计说明书 - 可逆直流PWM驱动电源的设计(请用B5纸打
- 032010年中考数学试题分类汇编(150套)专题三整式
- 固定式钢梯及平台安全检查表 - 图文
- 第二讲普通昆虫学 - 作业1(病害)
- 齐齐哈尔明月岛违建高尔夫球场调查
- 江苏省宜兴市周铁学区2014-2015学年八年级下学期期中考试语文试
- 钻孔桩异常处理指导书
- Twyman-Green干涉实验 - 图文
- 审计(2017)第10章 采购与付款循环的审计 章节练习(后附答案)
- 道外区2013~2014学年度九年级化学上册期末考试题及答案