《[设计]c语言程序课程设计日记本管理系统》由会员分享,可在线阅读,更多相关《[设计]c语言程序课程设计日记本管理系统(28页珍藏版)》请在金锄头文库上搜索。
1、c语言程序课程设计日记本管理系统日记管理系统的开发设计实验目的、要求一、实验题目:设计一个简单实用个人日记管理系统。二、实验要求1该实验的课内学时是4个课时。2程序完成后应该完成如下基本功能:1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段;2)使用者必须输入密码;3)写日记与保存功能;4)日记查阅:按日期查看,按关键字查看,按顺序查看功能(从某一篇开始)3在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:1)实现日记的永久存储。2)对保存的密码进行变换,以免泄密。3)允许多人使用。4)在程序的提示语言清晰明确,界面美观并且适用。实验步骤与内容一)主要设计思想 日记管理
2、系统设计,应分模块进行。首先一个注册、登录的用户界面,编写函数保存用户已录入信息,及密码。编写函数用于验证用户登录信息,并进行匹配。有能力的话,可以添加一个用户密码修改功能 当用户注册,登录匹配成功以后,进入其个人日记管理界面。其中应当包含一些日记处理基本操作:写日记、保存、打开、各种方式查询、删除。各个功能分别用函数来实现,最后主函数用case语句调用各函数。二)主要数据结构及其解释1日记结构体typedef struct Link1 char date10; /日期 格式2011-05-11 char title40; /标题 char content1000; /日记内容 char ke
3、yword20; /关键字,可用空格隔开 int tag; /用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0; struct Link1 *nextd; Diary;2用户结构体typedef struct Link2 char username25; /用户名 char password16; /登录密码 Diary *diarys_list; /该用户拥有的日记链表 struct Link2 *nextu; User;三)系统结构图: 四)所有函数的简要说明:int Change_Password(User *U2); /*更改用户密码*/ int Create_NewUse
4、r(User *U1); /*创建用户链表*/ int Delete_Diary(Diary *D); /*删除日记*/ int Diary_Operation(User *U2,Diary *D1); /*日记操作*/ int Encrypt_Password(char password);/* 将登录口令加密*/ int Enter_Password(char password);/* 获取登录口令*/ User *Find_User(User *U1,char username);/*查找用户*/ Diary *Init_Diary(Diary *D1);/*初始化日记表*/ void
5、Initial_Tag(Diary *D1,int tag); User *Init_User(User *U1);/*初始化用户表*/ int Input_Choose(); int Open_Diary(Diary *D1); Diary *Open_DiaryFile(Diary *D1,char FileName);/* 打开并导入日记文件*/ int Printf_DiaryList(Diary *D1);/*显示日记列表*/ void Print_Menu1(int *choose1);/*进入菜单*/ void Print_Menu2(int *choose2);/*进入日记菜单
6、*/ void Print_Menu3(int *choose3);/*进入日记查阅菜单*/ int Printf_users(User *U1);/*导入用户信息*/ int Save_Diary(Diary *D1);/*保存日记*/ int Save_Users_info(User *U1);/*保存用户信息*/ int Search_Diary(Diary *D1);/*日记查询*/ Diary *Filter_word(Diary *D1,char cmpword,int n);/*按标题、日期、关键字查阅*/ User *User_Login(User *U1);/* 登录个人用户
7、*/ int Write_Diary(Diary *D1);/* 写新日记*/试验过程记录记录试验中遇到的困难及解决方法;,1.在编写字符匹配的函数时,利用flag当监视哨,当判断字符匹配成功后,未跳出本次循环,导致单个结果多次输出。解决方法:在匹配成功输出结果后加一个goto 语句跳出循环,进行下一个节点比较。2.在写筛选函数的时候,把筛选查找直接写成了筛选算法,这样输入的数据经过一次筛选后,不符合条件的就被删除了。这样不利于重复进行筛选操作。解决方案:在结构体中加一个fflag单元,当每次判断不符合条件的节点,将其fflag赋值为0,否则赋1。输出时将fflag!=0的输出。3.本程序用到
8、双链表,注意指针指向。实验结果记录以及与预期结果比较以及分析记录每次实验结果以及分析情况1.创建用户: 用户名jiang,密码123 2.显示用户,及登录:输入用户名jiang,密码123. 3.写日记:标题:夏热 标题:端午 4.保存及读取: 5.输入查阅,标题: 端午 输入关键字晴天,查询: 6.日记删除操作: 实验结论:经验证,以上筛选结果正确。总结以及心得体会本次试验的其实很想自己想的,可是自己真的写不出来这么长的,只能半借鉴半写,所以我只能说懂这个程序,会用,但是,让我自己写,还是很有难度的,太多了,写的头痛,纠结死了,花了我好长时间,一直纠结到现在,自己写了300多行,可是有点问题
9、,远不如同学的,就把自己的改了,我只能写一些小程序,像运用到归纳啊,贪心这些。注意一些常出现的错误:1.字符匹配时要注意,字符串长度应为输入长度再加1.(0占一个空间) 2.注意指针指向问题,最好用两个指针,一个用于判断结束,一个用于输出所需值。3.可以用flag设置监视哨,判断是否找到所需结果。 历经千辛万苦,终于编出来了。发现指针这一块还有很多漏洞。比如插入时未将尾指针赋空值,导致了很多问题。还有特别要注意对字符串操作时的长度问题。总之,吃一堑,长一智,在自己编程实践,请教同学的过程中,学到很多很多。不过指针那方面的知识还是有些模糊不够熟练,有待加强。指导老师评阅意见指导老师: 年 月 日
10、/* 日记管理系统*/#include#include#include#include#define ESC 27 /退出键#define Enter 13 /回车键#define BackSpace 8/*定义日记结构体*/typedef struct Link1 char date10; /日期 格式2009-12-30 char title40; /标题 char content1000; /日记内容 char keyword20; /关键字,可用空格隔开 int tag; /用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0; struct Link1 *nextd; Dia
11、ry;/*定义用户结构体*/typedef struct Link2 char username25; /用户名 char password16; /登录密码 Diary *diarys_list; /该用户拥有的日记链表 struct Link2 *nextu; User;/* 函数声明*/ int Change_Password(User *U2); /*更改用户密码*/ int Create_NewUser(User *U1); /*创建用户链表*/ int Delete_Diary(Diary *D); /*删除日记*/ int Diary_Operation(User *U2,Dia
12、ry *D1); /*日记操作*/ int Encrypt_Password(char password);/* 将登录口令加密*/ int Enter_Password(char password);/* 获取登录口令*/ User *Find_User(User *U1,char username);/*查找用户*/ Diary *Init_Diary(Diary *D1);/*初始化日记表*/ void Initial_Tag(Diary *D1,int tag); User *Init_User(User *U1);/*初始化用户表*/ int Input_Choose(); int
13、Open_Diary(Diary *D1); Diary *Open_DiaryFile(Diary *D1,char FileName);/* 打开并导入日记文件*/ int Printf_DiaryList(Diary *D1);/*显示日记列表*/ void Print_Menu1(int *choose1);/*进入菜单*/ void Print_Menu2(int *choose2);/*进入日记菜单*/ void Print_Menu3(int *choose3);/*进入日记查阅菜单*/ int Printf_users(User *U1);/*导入用户信息*/ int Save_Diary(Diary *D1);/*保存日记*/ int Save_Users_info(User *U1);/*保存用户信息*/ int Search_Diary(Diary *D1);/*日记查询*/ Diary *Filter_word(Diary *D1,char cmpword,int n);/*按标题、日期、关键字查阅*/ User *User_Login(User *U1);/* 登录个人用户*/ int Write_Diary(Diary *D1);/* 写新日记*/* 更改用户密码*/int Change_Password(User *U2)