付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、福建工程学院实验报告专业计算机科学与技术班 级计算机 1001座号姓名日期2012/5/14精选文库福建工程学院计算机与信息科学系实验报告2010 2011学年第一学期任课老师:章静实验题目日记管理系统的开发实验开始日期: 20120503实验时间报告提交日期:20120514实验目的、要求一、 实验题目:设计一个简单实用个人日记管理系统。二、实验要求1该实验的课内学时是4 个课时。2程序完成后应该完成如下基本功能:1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段;2)使用者必须输入密码;3)写日记与保存功能;4)日记查阅:按日期查看,按关键字查看,按顺序查看功能(从某一篇开始)3
2、在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:1)实现日记的永久存储。2)对保存的密码进行变换,以免泄密。3)允许多人使用。4)在程序的提示语言清晰明确,界面美观并且适用。实验设计内容-2精选文库( 1)实验设计的数据结构/*定义日记结点类型*/typedef struct Diarychar date15;/*日期 */char title20;/*日记标题 */int flag;/*判断日记是否符合查阅要求,是为0,否为 -1*/struct Diary *next;Diary;/*定义用户结点类型*/typedef struct Userchar name20; /*用户
3、名 */char password20;/*登录密码 */int count;/*该用户拥有的日志的个数*/Diary *first; /*指向用户拥有的日记链表的表头*/struct User *next;*Us,User;最后的用户信息以及在该用户目录下的日志信息以二进制的形式存在文件中。( 2)总体函数模块结构图:用户登陆和注册写入日记按顺序查询日志管理日记查询按日期查询系统日记删除按照关键字查询用户、日记信息保存初始化用户、日志信息读取密码修改-3精选文库(3) 重点函数分析1.初始化函数:程序运行会运行此函数,讲已有的用户信息和她们的日志信息读入链表中。UsInit()FILE *f
4、p1,*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;elsewhile(!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);
6、return(L);2.登录结构流程图:-4精选文库开始输入用户名及其对应密码N判断输入的用户名和密码链表中是否存在Y进入日志操作界面代码:/* 用户登录函数*/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");prin
7、tf("tt|n");printf("tt|t序号 t用户名 tt|n");count=1;while(p!=NULL)/ 将已经有的用户名和对应序号打印出来printf("tt|t%dt%stt|n",count,p->name);p=p->next;count+;-5精选文库printf("tt|n");count-;printf("nnt输入序号 :tt");i=Input_Integer(); /这样我们在选择序号时输入字符也不会造成死循环 while(i>count|
8、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(j<i)j+;p=p->next;printf("nt你选择的用户 :tt%s",p->name);print
9、f("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("
10、nt输入密码 :tt");Password_input(temp);Express_chage_dark(temp);printf("nnttt登入中 ,请稍等 .");system("cls");User_Operate(p,L);/用户登入后,进行用户操作3.用户注册:结构流程图:-6精选文库开始输入要注册的用户名Y检查该用户是否已经存在N输入密码(密码确认)N两 次 输入 密 码相同Y注册成功代码:/* 新用户申请函数*/Us User_apply(Us L)char temp120;char temp220;int i;char fla
11、g;User *p;-7精选文库User *s;rewind(stdin);s=(User *)malloc(sizeof(User);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;/ 输出系统已存在的用户名,以让用户申请新
12、用户时,有个注意,不申请重复的用户名p=L;printf("nnt输入用户名 :tt");scanf("%s",s->name);rewind(stdin);while(p!=NULL&&strcmp(p->name,s->name)!=0)p=p->next;/ 判断有没有重复的用户名while(p!=NULL)printf("nt该用户名已经存在!n");printf("nt是否继续进行申请用户:(Y or N)");scanf("%c",&f
13、lag);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);pr
14、intf("nt确认密码 :tt");Password_input(temp2);-8精选文库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
15、(s->name);/ 生成相应用户对应的文件夹,文件夹里用来存储相应用户的相应日记Express_chage_dark(s->password);/ 进行密码家秘密s->next=L;L=s;Save_user(L);getchar();/ 每添加一个用户时,都要进行存储用户信息的保存printf("ntt申请中 ,请稍等 .");printf("nnttt申请成功! nnt");getchar();return(L);4.写日志操作:说明: 在次用户登陆后,打开文件,直接找到该用户目录下的日志表单,将写入的日志直接写到这个人的用户的
16、文件夹中, 日志具体内容并不是保存在链表中的, 由于考录到日志内容可能会很长,这样可以节省空间。函数结构流程图:开始输入日记内容、日记名、日记时间打开文件fp=fopen讲日记内容写入到文件中保存更新后的用户信息和日志信息链表-9精选文库代码:/* 写日记 */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(
17、stdin);Express_chage_dark(temp);/对日记内容加密s=(Diary *)malloc(sizeof(Diary);/ 为保存日志的节点动态申请空间printf("nnt输入要保存的日记名:t");scanf("%s",s->title);getchar();rewind(stdin);while(Search_dairy(H,s->title)!=1)printf("nt该日记名已经存在,请重新输入!");printf("nt重新输入要保存的日记名:t");scanf(&q
18、uot;%s",s->title);getchar();printf("ntt该日记名可以使用");printf("nt输入日期时间:(20120501)t");scanf("%s",s->date);getchar();rewind(stdin);s->flag=0;chdir(H->name);/ 把相应用户目录作为当前工作的目录(因为日志信息是直接放在文件中的,每次对日志内容添加、修改是都要先打开文件)if(fp=fopen(s->title,"w")=NULL)pri
19、ntf(" 对不起 ,不能打开文件!");return;i=0;printf("nt保存中 ,请稍等 .");while(tempi!='0')fwrite(temp+i,1,1,fp);/将信息写入文件流中(要输出数据的地址,要读写的字节-10精选文库数,要读写的字节数据的个数,文件类型的指针)i=i+1;s->next=H->first;/头插法,新写的日志排在最前面H->first=s;H->count+;fclose(fp);Save_dairy(H);/保存相应用户的日记信息Save_user(L);/保
20、存用户信息, 因为此时用户的count 已经改变了,需要保存printf("nnt保存完毕 !nnt");4. 查阅日记操作函数流程图:开始选择查询方式按顺序查询按关键字查询按日期查询输出日记返回代码:/* 查阅日记 */void Consult_dairy(User *H,int i)Diary *p;FILE *fp;char temp200;int j;int flag=0;/ 先进行遍遍历,若有找到符合条件的日志则做标记-11精选文库p=H->first;if (i=-1)/ 进行顺序查询printf("nnt请输入要顺序查看的日记序号:t"
21、;);scanf("%d",&j);if(j<=H->count)while(j>1)p=p->next;j-;p->flag=-1;/找到符合条件日记,对应结点的flag 赋为 -1,以便待会筛选出来flag=1;/ 在此用户的日志链表中有找到过符合条件的日志elseif (i=0)printf("nt输入要查询的日期:t");/ 进行日期查询if (i=15)printf("nt输入要查询的关键字:t"); / 进行关键字查询scanf("%s",temp);rewind(
22、stdin);while(p!=NULL)if(strstr(p->date+i),temp)!=NULL)/分配的空间是连续的 p->flag=-1;/ 找到符合条件的结点,其flag 赋予 -1,以便待会筛选出来flag=1;/在此用户的日志链表中有找到过符合条件的日志p=p->next;if(flag=0)printf("ntt对不起 ,找不到所需要的日记");elsep=H->first;printf("nt要查看的日记如下n");chdir(H->name);/ 把相应用户的目录弄为当前工作目录(要对文件进行操作)
23、while(p!=NULL)if(p->flag=-1)/ 先前找到的符合条件的日子打印出来printf("nt n");-12精选文库printf("tt日记名 :%stt 时间 %sn",p->title,p->date);p->flag=0;/ 筛选输出结点的flag 为 -1的日记名,日期Read_dairy(p->title);p=p->next;printf("nntt");5. 删除用户日记函数流程图:代码:/* 删除用户日记*/void Delete_dairy(User *H,Us
24、 L)Diary *p;/ 指向要删除的结点-13精选文库Diary *pre;/指向要删除的结点的前驱结点int i,j;char flag;printf("nnt请输入要删除的日记序号:tt");scanf("%d",&i);rewind(stdin);j=i;p=H->first;/先找到要进行删除的结点if(j<=H->count)/先判断一下输入的药删除日志的编号是否小于该用户拥有的总日志的个数while(i>1)p=p->next;i-;p->flag=-1;/要删除的结点的flag 标识符设为 -
25、1p=H->first;/再对找到的结点进行删除操作while(p!=NULL&&(p->flag=0)pre=p;p=p->next;printf("nt要删除的日记是:n");printf("tt序号 :%dt日记名 :%st 时间 :%s",j,p->title,p->date);getchar();printf("nt是否确认要删除:(Y or N) t");scanf("%c",&flag);rewind(stdin);if(flag='Y
26、39;|flag='y')if(H->first=p)H->first=p->next;/ 要删除的结点为第一结点时elsepre->next=p->next;/要删除的结点不是第一结点时elsereturn ;chdir(H->name);/把相应用户的目录弄为当前工作目录H->count-;/ 用户的日记数减1remove(p->title);/ 去掉相应的文件free(p);/ 释放要删除的结点空间Save_dairy(H);/ 保存用户日记信息,不然原有的用户日记信息还是不变Save_user(L);/ 保存用户信息pri
27、ntf("nt删除中 ,请稍等 .");-14精选文库printf("nnt删除成功 !nt");getchar();elseprintf(" 序号太大 n");7用户及其拥有的日志信息在文件中的保存/* 保存用户日记信息*/voidSave_dairy(User *H)FILE *fp;Diary *p;chdir(H->name);/把相应用户目录作为当前工作目录(用于文件操作)if(fp=fopen("dairylist.txt","w")=NULL)printf(" 输入
28、有误 :不能打开文件!n");return;p=H->first;while(p!=NULL)fwrite(p,sizeof(Diary),1,fp);/ 将信息写入文件流中(要输出数据的地址,要读写的字节数,要读写的字节数据的个数,文件类型的指针)p=p->next;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,
29、fp);p=p->next;fclose(fp);-15精选文库调试过程记录1.while(feof(fp)=0)fwrite(fp,"%c",&tempi);i+;本系实验主要是考察队文件的运用,而我一开始对文件这一部分的编程比较陌生,在经过看书查阅各种资料后,对其的一些知识有所了解,经过实验中的反复运用加以熟练。例如通过实验代码的反复测试我发现了:Fwrite 写入的是一个数据块,fscanf 一个一个的输入,这边只能用fscanf实验结果记录以及与预期结果比较以及分析1.主界面2.用户注册界面-16精选文库3.用户操登陆4.登陆后菜单:-17精选文库4.
30、1 写日志功能:4.2 查看自己日志:(按顺序查找)-18精选文库4.3 查看好友日志:(按日期查找)4.4 删除日志:4.5 更改密码:-19精选文库总结以及心得体会这次实验综合考察了链表和文件的操作,有一定的复杂性。在实验的训练中,一开始拿到题目没有什么思路主要是不明白日志具体要实现什么功能,然后要实现的这些功能又要用什么样的函数来构成。 然后通过查阅有关资料, 看人家的成平的具体结构在思想中有了大体的结构才开始一个功能一个功能的实现的编写。而日志管理系统的编写中最主要的就是文件的运用,在这里我的我们用户所写的日志并不存在用户的日志链表中,而是直接写入文件,读取的时候是通过日志的名称找到那
31、一个日志的文件,然后打开文件直接从文件中读取并显示出来。这样么可以节省很多的空间, 因为用户的日志的长度有长有短, 如果日志的内容页存在日志的链表中会真用很大空间,造成浪费现象,而且用户输入的日志长度还会有所限制。考虑到这些,就采用直接将用户的日志内容存在文件中的方法了。总之,在日志系统的编写中,不仅对链表的使用更加熟练也加强了文件这一部分的运用。同时也十分感谢老师在实验过程中给予的耐心指导。指导老师评阅意见指导老师:年月日整体代码:/* 日记管理系统*/-20精选文库#include<stdio.h>#include<math.h>#include<string
32、.h>#include<stdlib.h>#define Enter 13/回车键/* 定义日记结点类型*/typedef struct Diarychar date15;/* 日期 */char title20;/* 日记标题 */int flag;/* 判断日记是否符合查阅要求,是为0,否为 -1*/struct Diary *next;Diary;/* 定义用户结点类型*/typedef struct Userchar name20;/* 用户名 */char password20;/* 登录密码 */int count;/* 该用户拥有的日志的个数*/Diary *f
33、irst; /*指向用户拥有的日记链表的表头*/struct User *next;*Us,User;/* 函数原型 */UsInit();/* 初始化函数 */void main_menu(Us L);void Help();/* 帮助使用函数 */Us User_apply(Us L);/* 新用户申请函数*/void Save_user(Us L);/* 保存所有用户信息*/void Login(Us L);/*用户密码登录函数*/int Input_Integer();/*整数控制函数*/void Express_chage_dark(char temp);/* 明文转化为密文*/vo
34、id Dark_chage_express(char temp);/* 密文转化为明文*/void User_Operate(User *H,Us L);int Search_dairy(User *H,char temp);/*查找是否有同名日记操作*/void Write_dairy(User *H,Us L);voidSave_dairy(User *H);/* 保存用户日记信息*/void Rejigger_user_password(User *H,Us L);/* 修改用户密码 */ void Read_dairy(char title);/* 读日记 */void Passwor
35、d_input(char temp);void Delete_dairy(User *H,Us L);void Consult_dairy_meno(User *H);/*查阅日记菜单*/-21精选文库void Consult_dairy(User *H,int i);Us findfriend(Us L);int main()Us L;begin();main_menu(L);/* 初始化函数 */UsInit()FILE *fp1,*fp2;Us L=NULL;User *p;Diary *s;if (fp1=fopen("Userlist.txt","r+&
36、quot;)=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);/ 把相应用户目录作为当前工作目录if(fp2=fopen("dairylist.txt","r")=NULL) continue;e
37、lsewhile(!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);-22精选文库return(L);/* 开始函数 */int begin()int i,j;system("color b");for(i=1;i<
38、;=1;i+)printf("nnnnnnntttn");printf("ttt n");printf("ttt 欢迎使用日志管理系统n");printf("ttt n");printf("ttt 设计者:张 夷n");printf("ttt 3100301101 n");printf("ttt 日期: 2012.4.28n");printf("ttt n");printf("ttt n");printf("
39、;nttt系统开始启动.n");for(j=1;j<100000000;j+)system("cls");printf("nnnnnnntttn");printf("ttt n");printf("ttt 欢迎使用日志管理系统n");printf("ttt n");printf("ttt 设计者:张 夷n");printf("ttt 3100301101 n");printf("ttt 日期: 2012.4.28n");
40、printf("ttt n");printf("ttt n");printf("nttt系统开始启动.n");for(j=1;j<100000000;j+)system("cls");printf("nnnnnnntttn");printf("ttt n");printf("ttt 欢迎使用日志管理系统n");printf("ttt n");printf("ttt 设计者:张 夷n");printf("
41、;ttt 3100301101 n");printf("ttt 日期: 2012.4.28n");printf("ttt n");-23精选文库printf("ttt n");printf("nttt系统开始启动.n");for(j=1;j<100000000;j+)system("cls");printf("nnnnnnnttt n");printf("ttt n");printf("ttt 欢迎使用日志管理系统n")
42、;printf("ttt n");printf("ttt 设计者:张 夷n");printf("ttt 3100301101 n");printf("ttt 日期: 2012.4.28n");printf("ttt n");printf("ttt n");printf("nttt系统开始启动 .n");for(j=1;j<100000000;j+)system("cls");printf("nnnnnnnttt n&qu
43、ot;);printf("ttt n");printf("ttt 欢迎使用日志管理系统n");printf("ttt n");printf("ttt 设计者:张 夷n");printf("ttt 3100301101 n");printf("ttt 日期: 2012.4.28n");printf("ttt n");printf("ttt n");printf("nttt系统开始启动 .n");for(j=1;j<
44、;100000000;j+)system("cls");printf("nnnnnnnttt n");printf("ttt n");printf("ttt 欢迎使用日志管理系统n");printf("ttt n");printf("ttt 设计者:张 夷n");printf("ttt 3100301101 n");printf("ttt 日期: 2012.4.28n");printf("ttt n");printf("ttt n");printf("nttt系统开始启动 .n");for(j=1;j<100000000;j+)system("cls");-24精选文库void main_menu(Us L)int i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理不良事件环境因素
- 基于云平台的医疗数据安全传输技术研究报告
- 房产出售分割合同协议书模板
- 小程序运营成长路径
- 2026年中国稀土顺丁橡胶行业市场发展前景研究报告-智研咨询发布
- 吉林省大学社区就业指导
- 税务稽查2026年合规审查合同协议
- 护理解剖学中的解剖学方法
- 劳动法规及劳动合同管理规定解析
- 领导力及管理技能培训计划
- 小区物业水电工培训
- 硝酸安全操作规程培训
- 施工方案 外墙真石漆(翻新施工)
- 《中医辩证施护》课件
- 幕墙技术标(暗标)
- 管理会计学 第10版 课件 第6章 存货决策
- 三方协议解约函电子
- 三对三篮球赛记录表
- 电气自动化社会实践报告
- 【关于某公司销售人员招聘情况的调查报告】
- 拉肚子的故事知乎拉黄稀水
评论
0/150
提交评论