日记管理系统(37页).doc
《日记管理系统(37页).doc》由会员分享,可在线阅读,更多相关《日记管理系统(37页).doc(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-日记管理系统-第 36 页福 建 工 程 学 院实 验 报 告专业 计算机科学与技术 班级 计算机1001 座 号 姓 名 日 期 2012/5/14 福建工程学院计算机与信息科学系实验报告 2010 2011 学年第 一 学期 任课老师: 章静 实验题目日记管理系统的开发实验时间实验开始日期:20120503 报告提交日期:20120514实验目的、要求一、实验题目:设计一个简单实用个人日记管理系统。二、实验要求1该实验的课内学时是4个课时。2程序完成后应该完成如下基本功能:1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段;2)使用者必须输入密码;3)写日记与保存功能;4)日记
2、查阅:按日期查看,按关键字查看,按顺序查看功能(从某一篇开始)3在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:1)实现日记的永久存储。2)对保存的密码进行变换,以免泄密。3)允许多人使用。4)在程序的提示语言清晰明确,界面美观并且适用。实验设计内容(1)实验设计的数据结构/*定义日记结点类型*/typedef struct Diary char date15; /*日期*/ char title20; /*日记标题*/ int flag; /*判断日记是否符合查阅要求,是为0,否为-1*/ struct Diary *next;Diary;/*定义用户结点类型*/typedef
3、 struct User char name20; /*用户名*/ char password20;/*登录密码*/ int count; /*该用户拥有的日志的个数*/ Diary *first; /*指向用户拥有的日记链表的表头*/ struct User *next;*Us,User;最后的用户信息以及在该用户目录下的日志信息以二进制的形式存在文件中。(2)总体函数模块结构图:初始化用户、日志信息读取密码修改日志管理系统用户登陆和注册写入日记日记查询日记删除用户、日记信息保存按顺序查询按日期查询按照关键字查询(3)重点函数分析1.初始化函数:程序运行会运行此函数,讲已有的用户信息和她们的
4、日志信息读入链表中。Us Init() FILE *fp1,*fp2; Us L=NULL; User *p; Diary *s; if (fp1=fopen(Userlist.txt,r+)=NULL) return L; while(!feof(fp1) p=(User *)malloc(sizeof(User); if(fread(p,sizeof(User),1,fp1)!=1) break; /从一个流中读取数据(接受数据的指针,单个元素的大小,元素个数,提供数据的文件指针) p-first=NULL; /读取系统已有的用户信息 p-next=L; L=p; chdir(p-name
5、); /把相应用户目录作为当前工作目录 if(fp2=fopen(dairylist.txt,r)=NULL) continue; else while(!feof(fp2) s=(Diary *)malloc(sizeof(Diary); /读取系统相应用户的相应日记信息 if(fread(s,sizeof(Diary),1,fp2)!=1) break; s-next=L-first; /first为该用户的节点拥有的日志链表 L-first=s; fclose(fp2); /关闭存储日志信息的文件,把父目录作为当前工作目录 fclose(fp1); return(L);2.登录结构流程图
6、: 开始输入用户名及其对应密码NY进入日志操作界面判断输入的用户名和密码链表中是否存在代码:/*用户登录函数*/void Login(Us L) char temp20; char flag; int i,j,count; User *p; Diary *s; p=L; system(cls); printf(nttt|n); printf(ttt|t用户登入t|n); printf(ttt|n); printf(nt已有的用户名:n); printf(tt|n); printf(tt|t序号t 用户名tt|n); count=1; while(p!=NULL) /将已经有的用户名和对应序号打
7、印出来 printf(tt|t%dt %stt|n,count,p-name); p=p-next; count+; printf(tt|n); count-; printf(nnt输入序号:tt); i=Input_Integer(); /这样我们在选择序号时输入字符也不会造成死循环 while(icount|i=-1) printf(nnt输入序号错误); printf(nt是否继续进行输入:(Y or N) ); scanf(%c,&flag); if(flag=N|flag=n) return; printf(nnt输入序号:tt); scanf(%d,&i); j=1; p=L; w
8、hile(jnext; printf(nt你选择的用户:tt%s,p-name); printf(nt输入密码:tt); Password_input(temp); /输入密码 Express_chage_dark(temp); /明码转化为暗码,以跟以保存的用户密码比较 while(strcmp(p-password,temp)!=0) printf(nt输入的密码错误!n); printf(nt是否继续输入:(Y or N)t); scanf(%c,&flag); if (flag=N|flag=n) return; printf(nt输入密码:tt); Password_input(te
9、mp); Express_chage_dark(temp); printf(nnttt登入中,请稍等.); system(cls); User_Operate(p,L); /用户登入后,进行用户操作3.用户注册:结构流程图:YNNY开始输入要注册的用户名检查该用户是否已经存在输入密码(密码确认)注册成功两次输入密码相同代码:/*新用户申请函数*/Us User_apply(Us L) char temp120; char temp220; int i; char flag; User *p; User *s; rewind(stdin); s=(User *)malloc(sizeof(Use
10、r); system(cls); printf(nttt|n); printf(ttt|t申请用户t|n); printf(ttt|n); printf(nt已有的用户名:n); p=L; while(p!=NULL) printf(ttt%sn,p-name); p=p-next; /输出系统已存在的用户名,以让用户申请新用户时,有个注意,不申请重复的用户名 p=L; printf(nnt输入用户名:tt); scanf(%s,s-name); rewind(stdin); while(p!=NULL&strcmp(p-name,s-name)!=0) p=p-next; /判断有没有重复的
11、用户名 while(p!=NULL) printf(nt该用户名已经存在!n); printf(nt是否继续进行申请用户:(Y or N) ); scanf(%c,&flag); if (flag=N|flag=n) free(s); return L; printf(t输入用户名:t); scanf(%s,s-name); rewind(stdin); p=L; while(p!=NULL&strcmp(p-name,s-name)!=0) p=p-next; printf(nttt该用户名可以使用n); printf(nt输入密码:tt); Password_input(temp1); p
12、rintf(nt确认密码:tt); Password_input(temp2); while(strcmp(temp1,temp2)!=0) printf(nt两次输入的密码不一致!n); printf(nt输入密码:tt); Password_input(temp1); printf(nt确认密码:tt); Password_input(temp2); strcpy(s-password,temp1); s-first=NULL; s-count=0; /申请好用户, mkdir(s-name); /生成相应用户对应的文件夹,文件夹里用来存储相应用户的相应日记 Express_chage_d
13、ark(s-password); /进行密码家秘密 s-next=L; L=s; Save_user(L); getchar();/每添加一个用户时,都要进行存储用户信息的保存 printf(ntt申请中,请稍等.); printf(nnttt申请成功!nnt); getchar(); return(L); 4.写日志操作:说明:在次用户登陆后,打开文件,直接找到该用户目录下的日志表单,将写入的日志直接写到这个人的用户的文件夹中,日志具体内容并不是保存在链表中的,由于考录到日志内容可能会很长,这样可以节省空间。函数结构流程图:开始输入日记内容、日记名、日记时间打开文件 fp=fopen讲日记内
14、容写入到文件中保存更新后的用户信息和日志信息链表代码:/*写日记*/void Write_dairy(User *H,Us L) int choice; char temp200; /用于存储写入的日记 FILE *fp; Diary *s; int i; printf(nnt输入日记内容:nntt); scanf(%s,temp); getchar(); rewind(stdin); Express_chage_dark(temp); /对日记内容加密 s=(Diary *)malloc(sizeof(Diary); /为保存日志的节点动态申请空间 printf(nnt输入要保存的日记名:t
15、); scanf(%s,s-title); getchar(); rewind(stdin); while(Search_dairy(H,s-title)!=1) printf(nt该日记名已经存在,请重新输入!); printf(nt重新输入要保存的日记名:t); scanf(%s,s-title); getchar(); printf(ntt该日记名可以使用); printf(nt输入日期时间:(20120501)t); scanf(%s,s-date); getchar(); rewind(stdin); s-flag=0; chdir(H-name); /把相应用户目录作为当前工作的目
16、录(因为日志信息是直接放在文件中的,每次对日志内容添加、修改是都要先打开文件) if(fp=fopen(s-title,w)=NULL) printf(对不起,不能打开文件!); return; i=0; printf(nt保存中,请稍等.); while(tempi!=0) fwrite(temp+i,1,1,fp); /将信息写入文件流中(要输出数据的地址,要读写的字节数,要读写的字节数据的个数,文件类型的指针) i=i+1; s-next=H-first; /头插法,新写的日志排在最前面 H-first=s; H-count+; fclose(fp); Save_dairy(H); /保
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日记 管理 系统 37
限制150内