1、1 C C 语言程序设计语言程序设计课程设计报告课程设计报告 题目题目: 学生通讯录学生通讯录 学 院 计算机学院_ 专 业_计算机科学与技术_ 年级班别_09 届 5 班_ 学 号 学生姓名_ _ 指导教师_ _ 成 绩 _ 2010 年 1 月 2 一、一、 设计目的设计目的 培养学生综合应用所学专业知识及计算机知识的能力,训练和提高软件开发技能。在教师 的指导下以课程设计为中心,独立地完成从可行性分析,需求分析,软件设计,编码到软件测试运 行的软件开发全过程。达到以下几点目标:深化已学的知识,完成从理论到实践的转化;提高 分析和解决实际问题的能力;培养“开拓创新“能力 二、 总体设计总体
2、设计(程序设计组成框图、较复杂函数的流程图) 1、程序设计组成框图: 进入通讯录系统进入通讯录系统 新建通讯录 增加记录1 查询记录 修改记录 删除记录 对记录进行 排序 保存文件1 返回上一级 菜单 打开已有通讯录 增加记录2 查询记录 修改记录 删除记录 对记录进行 排序 保存文件2 返回上一级 菜单 3 2、较复杂函数流程图: revise()修改函数: N Y a=Y a=N a 为其它 b=1 b=2 三、三、 思路思路 (1)我先是列出了函数目录,清楚程序需要什么功能以及菜单该如何设置,然后就做菜 单框架,菜单框架的思路如下: 1输出主菜单,输入数字并返回选择的数字 2输出分菜单,
3、使用分菜单菜单,通过 switch(主菜单)实现,从主菜单中得到输入的数字, 每一步 case 跳到各自的分支函数,运行完分函数后返回 switch继续选择 case 目录 3最后一个 case 选项用来跳出分菜单,返回第一步 (2)然后就是对各个函数的初步理解,此时思路确定为通过指针变量的移动和结构体的 开始 输入名字 name Name=p1-name 指针 p1 后移 是否想修改,并输入 a=Y/N a 的值 输入修改后的数据 p1-name,p1-tel 输入 1 或 2 b 的值 返回 2 级菜单, 调用函数 run2(d,head) 结束 4 应用添加修改数据,列出了一下几个需要用
4、到的函数名称并进行声明和列出程序的头文件和 需要用到的宏定义和两个全局变量: #include #include #include #include #include #define NULL 0 #define LEN sizeof(struct address) int mainmenu(void); int selectmenu(void); void run1(int b); void run2(int c,ADDR*head); ADDR * creat(void); ADDR* add_record(ADDR*head); ADDR* delete_record(ADDR*head
5、); void find_record(ADDR*head); void display(ADDR*head); ADDR* sort (ADDR*head); ADDR* load(ADDR*head); ADDR* save(ADDR*head); ADDR * revise(ADDR *head); int n=0; ADDR *head; (3) 最后就是完善函数,在单文件中运行调试,逐渐地修改函数。 四、四、详细设计详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等) ) 1、增加数据函数 add_record() 声明 ADDR* add_record(AD
6、DR*head),以头指针为形参,并返回头指针。函数内定义结 构体指针变量 p1、p2。先为 p1 开辟一段空间,这段空间是一个这个结构体的结点的空间, 提示用户循环输入名字和电话号码,并限制输入的号码为 8 位或 11 位,否则返回重新输入电 话 号 码 。 当指 针 变量 p1 得到 一 段 数据 后 就将 它 插 入当 前 链表 的 首部 , 通 过 p1-next=head;head=p1;来实现,每次输入一段数据后全局变量 n 就自加 1,显示当前有 n 个 结点。当用户输入的名字为 0 时跳出循环,调用显示函数 display(),在屏幕上输出当前数据 个数以及数据。最后返回头指针给函数。 2、查询记录函数 find_record() 声明void find_record(ADDR*head), 为空类型, 以头指针作为形参。 定义字符数组 name2, 整形变量 a、b,结构