收藏 分销(赏)

日记管理系统.doc

上传人:丰**** 文档编号:4087527 上传时间:2024-07-29 格式:DOC 页数:35 大小:151.04KB
下载 相关 举报
日记管理系统.doc_第1页
第1页 / 共35页
日记管理系统.doc_第2页
第2页 / 共35页
日记管理系统.doc_第3页
第3页 / 共35页
日记管理系统.doc_第4页
第4页 / 共35页
日记管理系统.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、福 建 工 程 学 院实 验 报 告专业 计算机科学与技术 班级 计算机1001 座 号 姓 名 日 期 2012/5/14 福建工程学院计算机与信息科学系实验报告20102011学年第一 学期 任课老师:章静实验题目日记管理系统的开发实验时间实验开始日期: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 struct User char name20; /用

3、户名/ char password20;/登录密码/ int count; /*该用户拥有的日志的个数*/ Diary first; /指向用户拥有的日记链表的表头/ struct User next;*Us,User;最后的用户信息以及在该用户目录下的日志信息以二进制的形式存在文件中.(2)总体函数模块结构图:初始化用户、日志信息读取密码修改日志管理系统用户登陆和注册写入日记日记查询日记删除用户、日记信息保存按顺序查询按日期查询按照关键字查询(3)重点函数分析1。初始化函数:程序运行会运行此函数,讲已有的用户信息和她们的日志信息读入链表中。Us Init() FILE fp1,*fp2; U

4、s 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; /读取系统已有的用户信息 pnext=L; L=p; chdir(pname); /把相应用户目录作为当前工作目录 if(fp2=fopen(”da

5、irylist。txt”,”r”))=NULL) continue; else while(!feof(fp2)) s=(Diary )malloc(sizeof(Diary); /读取系统相应用户的相应日记信息 if(fread(s,sizeof(Diary),1,fp2)!=1) break; snext=Lfirst; /first为该用户的节点拥有的日志链表 Lfirst=s; fclose(fp2); /关闭存储日志信息的文件,把父目录作为当前工作目录 fclose(fp1); return(L);2.登录结构流程图:开始输入用户名及其对应密码NY进入日志操作界面判断输入的用户名和密

6、码链表中是否存在代码:/用户登录函数*/void Login(Us L) char temp20; char flag; int i,j,count; User p; Diary s; p=L; system(”cls); printf(”ntttn”); printf(tttt用户登入tn); printf(”tttn); printf(”nt已有的用户名:n); printf(tt|n”); printf(ttt序号t 用户名tt|n); count=1; while(p!=NULL) /将已经有的用户名和对应序号打印出来 printf(”tttdt %stt|n,count,pname)

7、; 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; while(jname); printf(nt输入密码:tt); Pa

8、ssword_input(temp); /输入密码 Express_chage_dark(temp); /明码转化为暗码,以跟以保存的用户密码比较 while(strcmp(ppassword,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(temp); Express_chage_dark(temp); printf(”nnttt登入中,请稍等。.”); s

9、ystem(”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(User)); system(cls”); printf(”nttt|n”); printf(”tttt申请用户t|n)

10、; printf(ttt|n); printf(nt已有的用户名:n”); p=L; while(p!=NULL) printf(”tttsn”,pname); p=pnext; /输出系统已存在的用户名,以让用户申请新用户时,有个注意,不申请重复的用户名 p=L; printf(”nnt输入用户名:tt); scanf(”%s,sname); rewind(stdin); while(p!=NULL&strcmp(p-name,sname)!=0) p=p-next; /判断有没有重复的用户名 while(p!=NULL) printf(”nt该用户名已经存在!!!!n”); printf(

11、”nt是否继续进行申请用户:(Y or N) ); scanf(”c”,flag); if (flag=Nflag=n) free(s); return L; printf(t输入用户名:t); scanf(%s”,s-name); rewind(stdin); p=L; while(p!=NULL&strcmp(pname,sname)!=0) p=pnext; printf(”nttt该用户名可以使用n); printf(”nt输入密码:tt); Password_input(temp1); printf(”nt确认密码:tt); Password_input(temp2); while(

12、strcmp(temp1,temp2)!=0) printf(”nt两次输入的密码不一致!!n”); printf(nt输入密码:tt”); Password_input(temp1); printf(nt确认密码:tt”); Password_input(temp2); strcpy(s-password,temp1); sfirst=NULL; scount=0; /申请好用户, mkdir(sname); /生成相应用户对应的文件夹,文件夹里用来存储相应用户的相应日记 Express_chage_dark(s-password); /进行密码家秘密 s-next=L; L=s; Save

13、_user(L); getchar();/每添加一个用户时,都要进行存储用户信息的保存 printf(ntt申请中,请稍等。.。.”); printf(”nnttt申请成功!nnt); getchar(); return(L); 4.写日志操作:说明:在次用户登陆后,打开文件,直接找到该用户目录下的日志表单,将写入的日志直接写到这个人的用户的文件夹中,日志具体内容并不是保存在链表中的,由于考录到日志内容可能会很长,这样可以节省空间。函数结构流程图:开始输入日记内容、日记名、日记时间打开文件 fp=fopen讲日记内容写入到文件中保存更新后的用户信息和日志信息链表代码:/写日记/void Wri

14、te_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”); scanf(%s”,stitle); getchar(); rewind(s

15、tdin); while(Search_dairy(H,s-title)!=1) printf(nt该日记名已经存在,请重新输入!!!!); printf(”nt重新输入要保存的日记名:t”); scanf(%s”,stitle); getchar(); printf(”ntt该日记名可以使用”); printf(nt输入日期时间:(20120501)t”); scanf(s,sdate); getchar(); rewind(stdin); sflag=0; chdir(H-name); /把相应用户目录作为当前工作的目录(因为日志信息是直接放在文件中的,每次对日志内容添加、修改是都要先打开

16、文件) if((fp=fopen(stitle,”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; Hcount+; fclose(fp); Save_dairy(H); /保存相应用户的日记信息 Save_user(L); /保存

17、用户信息,因为此时用户的count已经改变了,需要保存 printf(nnt保存完毕!nnt”);4。 查阅日记操作函数流程图:开始按顺序查询选择查询方式按关键字查询按日期查询输出日记返回代码:/*查阅日记/void Consult_dairy(User H,int i) Diary p; FILE fp; char temp200; int j; int flag=0;/先进行遍遍历,若有找到符合条件的日志则做标记 p=H-first; if (i=1) /进行顺序查询 printf(”nnt请输入要顺序查看的日记序号:t”); scanf(”d,j); if(j=H-count) whil

18、e(j1) p=pnext; j-; pflag=1; /找到符合条件日记,对应结点的flag赋为-1,以便待会筛选出来 flag=1; /在此用户的日志链表中有找到过符合条件的日志 else if (i=0) printf(nt输入要查询的日期:t); /进行日期查询 if (i=15) printf(”nt输入要查询的关键字:t”); /进行关键字查询 scanf(”s”,temp); rewind(stdin); while(p!=NULL) if(strstr(p-date+i),temp)!=NULL) /分配的空间是连续的 pflag=1; /找到符合条件的结点,其flag赋予1,

19、以便待会筛选出来 flag=1; /在此用户的日志链表中有找到过符合条件的日志 p=p-next; if(flag=0) printf(”ntt对不起,找不到所需要的日记”); else p=Hfirst; printf(”nt要查看的日记如下n); chdir(Hname); /把相应用户的目录弄为当前工作目录(要对文件进行操作) while(p!=NULL) if(p-flag=1) /先前找到的符合条件的日子打印出来 printf(nt-n”); printf(tt日记名:stt时间sn”,ptitle,p-date); pflag=0; /筛选输出结点的flag为1的日记名,日期 Re

20、ad_dairy(p-title); p=p-next; printf(nntt”);5。删除用户日记函数流程图:代码:/删除用户日记/void Delete_dairy(User H,Us L) Diary p; /指向要删除的结点 Diary pre; /指向要删除的结点的前驱结点 int i,j; char flag; printf(nnt请输入要删除的日记序号:tt”); scanf(”d”,&i); rewind(stdin); j=i; p=Hfirst; /先找到要进行删除的结点 if(j=Hcount) /先判断一下输入的药删除日志的编号是否小于该用户拥有的总日志的个数 whi

21、le(i1) p=p-next; i; pflag=-1; /要删除的结点的flag标识符设为1 p=Hfirst; /再对找到的结点进行删除操作 while(p!=NULL&(p-flag=0)) pre=p; p=pnext; printf(”nt要删除的日记是:n”); printf(tt序号:dt 日记名:%st时间:s”,j,ptitle,p-date); getchar(); printf(”nt是否确认要删除:(Y or N) t”); scanf(”c,flag); rewind(stdin); if(flag=Y|flag=y) if(H-first=p) H-first=p

22、next; /要删除的结点为第一结点时 else prenext=p-next; /要删除的结点不是第一结点时 else return ; chdir(H-name); /把相应用户的目录弄为当前工作目录 Hcount-; /用户的日记数减1 remove(ptitle); /去掉相应的文件 free(p); /释放要删除的结点空间 Save_dairy(H); /保存用户日记信息,不然原有的用户日记信息还是不变 Save_user(L); /保存用户信息 printf(nt删除中,请稍等。.。.); printf(”nnt删除成功!!nt);getchar(); else printf(”序

23、号太大n”); 7用户及其拥有的日志信息在文件中的保存/保存用户日记信息*/void Save_dairy(User H) FILE fp; Diary *p; chdir(Hname); /把相应用户目录作为当前工作目录(用于文件操作) if(fp=fopen(”dairylist.txt”,w))=NULL) printf(输入有误:不能打开文件!n”); return; p=H-first; while(p!=NULL) fwrite(p,sizeof(Diary),1,fp); /将信息写入文件流中(要输出数据的地址,要读写的字节数,要读写的字节数据的个数,文件类型的指针) p=p-n

24、ext; fclose(fp);/*保存全部用户日记信息/void Save_user(Us L) FILE fp; User p; fp=fopen(Userlist。txt”,”w); p=L; while(p!=NULL) fwrite(p,sizeof(User),1,fp); p=pnext; fclose(fp);调试过程记录1。while(feof(fp)=0) fwrite(fp,”c”,tempi); i+; 本系实验主要是考察队文件的运用,而我一开始对文件这一部分的编程比较陌生,在经过看书查阅各种资料后,对其的一些知识有所了解,经过实验中的反复运用加以熟练.例如通过实验代码

25、的反复测试我发现了:Fwrite 写入的是一个数据块,fscanf 一个一个的输入,这边只能用fscanf实验结果记录以及与预期结果比较以及分析1。主界面2.用户注册界面3。用户操登陆4。登陆后菜单:4。1写日志功能:4.2查看自己日志:(按顺序查找)4。3查看好友日志:(按日期查找)4。4删除日志:4。5更改密码:总结以及心得体会这次实验综合考察了链表和文件的操作,有一定的复杂性.在实验的训练中,一开始拿到题目没有什么思路主要是不明白日志具体要实现什么功能,然后要实现的这些功能又要用什么样的函数来构成。然后通过查阅有关资料,看人家的成平的具体结构在思想中有了大体的结构才开始一个功能一个功能的

26、实现的编写。而日志管理系统的编写中最主要的就是文件的运用,在这里我的我们用户所写的日志并不存在用户的日志链表中,而是直接写入文件,读取的时候是通过日志的名称找到那一个日志的文件,然后打开文件直接从文件中读取并显示出来。这样么可以节省很多的空间,因为用户的日志的长度有长有短,如果日志的内容页存在日志的链表中会真用很大空间,造成浪费现象,而且用户输入的日志长度还会有所限制.考虑到这些,就采用直接将用户的日志内容存在文件中的方法了。总之,在日志系统的编写中,不仅对链表的使用更加熟练也加强了文件这一部分的运用.同时也十分感谢老师在实验过程中给予的耐心指导。指导老师评阅意见指导老师:年月日整体代码: /

27、*日记管理系统/includestdio.h#include#includestring.hincludefirst=NULL; /读取系统已有的用户信息 pnext=L; L=p; chdir(p-name); /把相应用户目录作为当前工作目录 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=Lfi

28、rst; /first为该用户的节点拥有的日志链表 Lfirst=s; fclose(fp2); /关闭存储日志信息的文件,把父目录作为当前工作目录 fclose(fp1); return(L);/*开始函数/int begin() int i,j; system(”color b); for(i=1;i=1;i+) printf(nnnnnnntttn”);printf(tttn”);printf(”ttt 欢迎使用日志管理系统 n);printf(tttn”);printf(”ttt 设计者: 张 夷 n”); printf(”ttt 3100301101 n); printf(”ttt 日期:2012。4.28 n”);printf(”tttn);printf(”tttn”);printf(”nttt系统开始启动.n”);for(j=1;j100000000;j+) system(cls”); printf(”nnnnnnntttn”);printf(”tttn”);printf(”ttt 欢迎使用日志管理系统

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 应用文书 > 报告/总结

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服