《C语言通讯录管理系统课程设计10》由会员分享,可在线阅读,更多相关《C语言通讯录管理系统课程设计10(24页珍藏版)》请在金锄头文库上搜索。
1、 软件设计报告题 目: C 语言通讯录管理系统 院系名称 : 电子工程学院专业名称 : 电子信息工程班 级 : 电子 0902班内序号 : 学生姓名 : 指导教师 : 时间 : 2010 年 6 月 21 日 至 2010 年 7 月 2 日 一、 课程设计目的本次课程设计的主要目的是综合运用所学的 C 语言知识解决一个比较实际的简单问题,侧重对函数、指针、结构体、文件和链表等相关内容的综合应用,使同学们能进一步熟悉掌握 C 语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。二、课程设计内容1、每一条记录包括一个学生
2、的学号、姓名、性别、年龄、生日、电话号码、QQ 号码、E-mail、地址。2、输入功能:可以一次完成无数条记录的输入。3、插入功能:按学号由小到大插入任意条学生记录。4、修改功能:查找学生对应学号,完成对学号、姓名、信息的修改。5、删除功能:查找学生对应学号,删除学生相关各项记录。6、查询功能:通过学号或姓名查找学生记录并显示;显示全部学生的信息记录;7、排序功能:按学生学号升序排列并显示学生信息;8、保存功能:将学生记录保存在任何自定义的文件中。9、读取功能:将保存在文件中的学生记录读取出来。10 密码功能:设定密码,可以输入两次,若正确输入进入程序,反之退出系统。11、界面设置:一个主菜单
3、可以任意调用,方便清晰美观。三、需求分析对所开发系统功能、性能的描述,想要实现的目标。1、用 C 语言实现系统;2、利用链表实现学生通讯录信息的数据结构设计;3、系统具有输入,输出,删除,查询,插入,排序,保存,读取多文件,密码设置等基本功能;4、系统的各个功能模块要求用函数的形式实现;5、将学生信息存储在文件中。6、完成设计任务并书写课程设计报告;四、概要设计1系统结构图(功能模块图)对系统进行分析,给出系统结构图;整个系统除了主函数外,另外还有 16 个函数,实现十项功能:密码功能、输入功能、插入功能、删除功能、修改功能、查找功能、显示功能、排序功能、读取功能、保存功能。本程序利用单链表存
4、储结构完成对学生成绩的动态管理,其基本功能模块如下图所示:密 码打开文件主 函 数 文件为空创 建插 入修 改删 除查 询按学号查询按姓名查询查询全部退 出排 序 退 出2功能模块说明对各个模块进行功能的描述。1) 主函数 main()首先调用密码函数,以确认用户是否有权限进入该系统;然后调用文件打开函数,打开一个文件进行编辑;通过利用 while()的无限次循环和 switch()实现各函数的调用,主要实现了“功能选择”的系统根据输入的数字选项来调用相应的函数。2) 密码函数 int password()这是一个无参函数,它的作用是输入密码并进行核对,最多执行两次,把密码是否正确的信息返回给
5、主函数。该函数起到了对用户权限的识别。3) 创建函数 struct Message *creat()这是一个无参函数,它的作用是使连表初始化,通过对输入函数 struct student *input()的调用,完成学生信息的初始化。 4) 输入函数 struct Message *input()这是一个无参函数,用来执行学生信息记录的输入,函数结束后,带回一个指向链表头的指针 head。 、5) 修改函数 struct Message *input2(struct Message *p1) 这是一个有参函数,形参为链表头的指针,用于修改学生信息时重新录入。6) 插入函数 struct Mes
6、sage *insert(struct Message *head) 这是一个有参函数,形参为链表头的指针,按照原来的学生序号由小到大进行插入,在插入过程中始终保持有序,最后返回链表头的指针。7) 信息修改函数 struct Message*modify(struct Message *head) 这是一个有参函数,形参为链表头的指针,输入要修改的学生的编号,函数通过查找与之相对应的学生信息并输出原始数据,对照原始数据重新进行修改。可循环无限次修改,直至选择 N,不再进行修改。并且返回新的头指针。8) 信息删除函数 struct Message *del(struct Message *hea
7、d)这是一个有参函数,形参为链表头的指针,输入要修改的学生的编号,函数寻找到与之相对应的学生信息进行删除,可循环无限次删除,直至选择 N,不再进行删除。并且返回新的头指针。9) 查询菜单函数 void enquire(struct Message *head)这是一个有参函数,形参为链表头的指针,用于为查询菜单函数中调用的函数传递参数。主要实现了“功能选择”的界面,在这个界面里有显示查询系统的四大功能,根据每个功能的序号进行选择,在执行完任意一个函数功能后,均返回到查询菜单,进而可以继续查询其他信息。10) 序号查询函数 void numfind(struct Message *head)这是
8、一个不返回值的有参函数,形参为“链表头的指针” ,实现按序号对某个学生进行查找,并显示所查找到的记录。11) 名字查询函数 void namefind(struct Message *head)这是一个不返回值的有参函数,形参为“链表头的指针” ,实现按姓名对某个学生进行查找,并显示所查找到的记录。12) 信息显示函数 void output1(struct Message *head) 这是一个不返回值的有参函数,形参为“链表头的指针” ,负责对全部学生成绩记录的输出。13) 输出学生信息 void output2(struct Message *p1) 这是一个不返回值的有参函数,形参为“
9、链表头的指针” ,负责对所指向的学生成绩记录的输出。14) 排序函数 void sort(struct Message *head) 这是一个有参函数,形参为链表头的指针,用于为排序菜单函数中调用的函数传递参数。在这个函数里可以调用序号排列函数。15) 序号排列函数 void sortnum(struct Message *head)这是一个有参函数,形参为链表头的指针,按学生的序号由小到大进行排序。16) 数据保存 void save(struct Message *head)这是一个不返回值的有参函数,形参为链表头的指针,可以把学生记录保存在电脑中的任意路径的二进制文件中。17) 读取文件
10、 struct Message *read()这是一个不返回值的有参函数,形参为链表头的指针,根据输入的文件地址进行读取。五、详细设计及运行结果流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。开 始输密码判断文件打开函数判断空 主函数输入值判断1.创建函数2.插入函数插入函数3.修改函数4.删除函数5.查询函数输入值判断1.序号查询2.姓名查询3.信息显示4.退 出6. 按学号排序7.结 束录入函数修改录入保存函数信息显示正确错误是否用户登录界面(需要密码登录系统)主菜单界面(有多个功能选项)输入信息模块修改信息模块查询信息模块退出系统六、调试情况,设计技巧及体会1、对自己设计
11、进行评价,指出合理和不足之处,提出改进的方案。程序总体设计结构合理,功能完善,界面友好清晰。但是在某些方面存在着不足,比如在密码的设置方面,只能是给定的密码。另外,缺少了信息统计这一模块。以上一些问题,尚显我能力的不足,需要认真深入学习 C 语言的许多东西。2、在设计过程中的感受。在本次程序设计中,我学会的更多的是坚持的精神和的持重的心态,哪怕报错的信息多到可以击溃我的神经,也要安下心,认认真真一点一点地寻找错误的原因。另外,我也学会了程序如何设计的基本思路,以及一些从未用过但是却功能特殊的函数。总之,在这两周里,学到了很多东西。七、参考文献C 语言程序设计 王曙燕 曹锰 王春梅等 科学出版社
12、 2005 年 2月C 语言程序设计 谭浩强 清华大学出版社 1999 年 12八、附录:源代码/*头文件*/#include#include#include#include#include#define NULL 0#define LEN sizeof(struct Message)typedef struct int year;int month; int day;Birthday;struct Message char name10;long num;char sex;int age;Birthday birth;char tel20;char QQ_num20;char E_mail2
13、0;char address20;struct Message *next;/*信息录入*/struct Message *input() struct Message *stu;system(cls);stu=(struct Message *)malloc(LEN); printf(n 姓名:);flushall();scanf(%s,stu-name);printf(n 学号:);scanf(%ld,printf(n 性别:); fflush(stdin);scanf(%c,printf(n 年龄:);scanf(%d,printf(n 生日(year-month-day):);flus
14、hall();scanf(%d-%d-%d,printf(n 电话号码:);scanf(%s,stu-tel);printf(n QQ 号码:); scanf(%s,stu-QQ_num);printf(n E-mail:);scanf(%s,stu-E_mail);printf(n 地址:); scanf(%s,stu-address);getchar();return(stu);/*整体输出*/void output1(struct Message *head)struct Message *p;int i=1;system(cls);for(p=head-next;p!=NULL;p=p
15、-next)printf(%8ld %4s %4c %4d %4d 年%d 月%2d 日 %8s %9s %10s %8sn,p-num,p-name,p-sex,p-age,p-birth.year,p-birth.month,p-birth.day,p-tel,p-QQ_num,p-E_mail,p-address);printf(n*n);i+;getch();/*信息输出*/void output2(struct Message *p1) struct Message *p;printf(n*n);printf(nOUTPUT:n);p=p1;if(p!=NULL)printf(%8ld %4s