C语言程序上机实习报告电话簿管理系统

C语言程序上机实习报告电话簿管理系统|c语言程序代码编程小程序设计|c语言课程设计报告课程案例

一 需求分析

设计一个电话簿管理系统,该系统主要有7个功能:(1)输入原始姓名,电话和地址;(2)删除信息;(3)查找信息;(4)插入信息(5)对信息进行排序;(6)输出信息;(7)退出程序。

二 概要设计

1.本程序包含11个函数:

(1)主函数main()

(2)创建单链表create()

(3)显示菜单函数menu()

(4)链表输出函数output()

(5)结点输入函数input()

(6)插入元素函数insert()

(7)删除元素函数delete()

(8)查找函数select()

(9)操作选择函数f()

(10)动画函数dh()

(11)图形函数tp()

2.各函数功能:

(1)main()函数首先调用动画函数dh(),在程序开始运行时显示一幅动画,按任意键退出;

(2)进入图形函数tp(),显示一朵六色花,按任意键退出;

(3)运行create()函数创建一个由用户输入的单链表(其中包括姓名,电话,地址),并在输入同时调用插入函数insert()对其进行排序;

(4)调用menu()函数,显示操作菜单,由用户输入选择项;

(5)调用f()函数,根据用户输入的选项调用相应的函数,如果选项不合法,要求用户重复输入;

(6)insert()函数,将用户输入的一条记录顺序插入到链表中;

(7)delete()函数,删除与用户输入姓名的相关记录;

(8)select()函数,可以按照姓名或电话号码查找与用户输入相关记录;

(9)在执行以上任一操作后,返回主菜单,执行下一次操作或退出;

(10)在每次操作后,调用output()函数输出当前链表内容;

(11)input()函数,由用户输入一条记录;

三.详细设计



1.链表输入输出函数

因为程序中多次用到链表输入输出,所以设计一个输入函数input()用于输入链表元素,输出函数output()用于链表输出.链表输入函数用指针变量作为形参,调用时将实参地址赋予形参,从而达到目的.链表输出函数也采用指针变量作为形参,调用时将链表首地址赋予形参,通过循环输出链表每一个元素.

2.创建链表排序输出

创建链表采用队列链表,考虑到创建后要进行排序,因此在创建的同时对其进行排序,也就是按顺序创建链表.因此,设想在创建链表时采用插入函数insert(),对其每一项进行顺序插入,在创建链表的同时也进行了排序.这样链表的排序得以实现,而且思路清晰,方法简单.

3.程序代码

下面是以上两个模块的程序代码

1. 输入输出

input(struct tb *p)

{ flushall();/*清空键盘缓冲区,为输入大量数据作准备*/

gets(p->name);

gets(p->tel);

gets(p->add);

}

void output(struct tb *head)

{ struct tb *p;

printf("the linked list is:\n");

for(p=head;p!=NULL;p=p->next)

printf("%-20s%-15s%-45s\n",p->name,p->tel,p->add);/*循环输出链表内容*/

}

2. 创建排序

struct tb *create(void)

{ struct tb *head,*q;

int i;

printf("This is a telenumber book!\nFirst,you should input %d records!\nPress \"enter\" to end the input of the \"name\",\"phonenumber\" and \"address\"!\n",N);

head=NULL;/*创建一个空链表*/

for(i=0;i<N;i++)

{ q=(struct tb *)malloc(L);

input(q);

head=insert(head,q);

}/*通过循环调用插入函数insert()创建顺序链表*/

return head;

}



四.调试分析

1.输入输出

考虑到电话号码可能包含区号,需要将区号和电话号码分隔开来, 由于各人习惯不同,所以将电话号码设计为字符串.这样,就可以采用习惯的分隔符将电话号码和区号分隔开来.但是这样以后,输入项都是大量字符,所以还得加上flushall()函数清空键盘缓冲区,为输入大量数据作准备.这样就解决了gets()函数不能输入的问题.输出链表关键要控制好循环和结束条件.先将指针p指向头指针head,通过p=p->next作为循环条件,而结束条件用p!= NULL 来控制.这样,每次调用output()函数,将头指针传给形参,通过循环就可以输出链表内容.

2.创建排序

创建链表采用队列式,关键是控制尾指针.由于考虑到要排序,所以为了简化程序实现,所以采用插入函数创建链表.创建链表时的每一个输入项都作为新元素插入到链表中,而插入函数是在有序链表的基础上设计的,并且插入也是顺序插入,因此,通过循环调用插入函数就可以实现创建链表和排序.

五.改进设想

1.用户输入数据时应有相应的提示,输入错误时应提示重新输入.添加帮助信息,在用户遇到问题时可以查看相应的帮助文件.输出时也应该使用比较规范的格式.

2. 创建链表应该可以从外部文件中读取信息.排序应设计相应独立的函数,以供其它函数独立调用,而且具有通用性.

3.整个程序初值应该从外部文件中调用,操作结果应该可以保存在外部文件中,以供下次运行时调用.

六.测试结果

1.建立单链表

输入 zhan san

12345678

shanghai

li si

021-87654321

ligong

wang wu

13579

guangzhou

zhao liu

24680

beijing

ma qi

12345

xianggang

2.排序

输出 li si 021-87654321 ligong

ma qi 12345 xianggang

wang wu 13579 guangzhou

zhang san 12345678 shanghai

zhao liu 24680 beijing

3.查询

输入 1

输入 1

输入 li si

输出 li si 021-87654321 ligong

输入 1

输入 2

输入 12345

输出 ma qi 12345 xianggang

4.插入

输入 2

输入 ba jie 123 taiyuan

输出 ba jie 123 taiyuan

li si 021-87654321 ligong

ma qi 12345 xianggang

wang wu 13579 guangzhou

zhang san 12345678 shanghai

zhao liu 24680 beijing

5.删除

输入 3

输入 ba jie

输出 li si 021-87654321 ligong

ma qi 12345 xianggang

wang wu 13579 guangzhou

zhang san 12345678 shanghai

zhao liu 24680 beijing

输入 5

输出 “菜单”

输入 4

退出程序

 

  • 上一篇文章:
  • 下一篇文章:
  • Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有