




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
福 建 工 程 学 院 结构化程序设计实 验 报 告专业 信息管理与信息系统 班级 0904 座 号 07 姓 名 常荣荣 日 期 2010/11/22 实验题 目设计一个简单实用个人日记管理系统实验报告内容一、 实验目的:1该实验的课内学时是4个课时。2程序完成后应该完成如下基本功能:1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段;2)使用者必须输入密码;3)写日记与保存功能;4)日记查阅:按日期查看,按关键字查看,按顺序查看功能(从某一篇开始)3在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:1)实现日记的永久存储。2)对保存的密码进行变换,以免泄密。3)允许多人使用。4)在程序的提示语言清晰明确,界面美观并且适用。二、 实验时间:2010/11/22三、 实验地点:C2-516四、 实验内容与步骤:(1) 实验设计的数据结构typedef struct diary char date20; /日期 char weather20; /天气 char content1000; /日记内容(数据域) struct diary *next; /指针域DIA;/日记数据结构typedef struct user char username20; char code20; /数据域 struct user *next; /指针域USER;/用户数据结构(2) 层次图(3) 各个函数分析/*主函数*/int main(void)定义USER 类型的头指针head为head申请空间head=(USER *)malloc(sizeof(USER); head-next=NULL; 从文件中读用户信息r_to_userfile(head); 调用主菜单函数 mainmenu(head);/*主菜单*/void mainmenu(USER *head)(将主函数中的head传给菜单函数) 定义变量 进入界面菜单 for(i=6;i0;i-) printf(.); Sleep( 700 ); / 延迟毫秒数 do菜单选项 switch(choose) case 1: regist(head); break; case 2: users(head); break; case 3: printf(退出!); break; 控制循环的语句 while(yes_no = y);/*新用户注册*/void regist(USER *head)(创建链表,将菜单函数中的变量head传递下来) USER *p,*q;定义两个USER类型的变量p,q。 int i,flag=0; char mima6; 给变量申请空间 do 用户名注册,判断用户数据结构中是否已经存在该用户名 for(q=head-next;q!=NULL;q=q-next) 如果用户名已经存在,定义一个变量(初始值为0)并给其赋值为1 flag=1; while(q!=NULL);当用户名不存在时if(flag!=1) 初始化密码for(i=0;icodei=0; printf(请输入六位数密码:ntt); for(i=0;icodei=getch(); printf(*); 令q始终指向head的最后一个结点后进行连接 printf(nt注册成功!); 写入文件w_to_usefile(head) 当用户名已经存在时else printf(该用户名已经存在!请重新注册!n);/*保存用户信息(将用户信息写入文件)*/void w_to_usefile(USER *head) 定义用户类型的 普通指针变量 p,将p定义为USER链表中的第一个结点,即 p=head-next; 打开文件名为USER.txt的文件。 判断是否为空,若为空,则直接打印“语句Can not open output file.” 不为空,则打开文件成功,将用户名、密码等写入到文件中 关闭文件。/*用户登录*/void users(USER *head) 定义一个日记数据结构类型的头head1,DIA *head1; 申请空间 定义一个USER类型的普通指针USER *p; 读出已经注册的用户信息r_to_userfile(head);登录时密码判断时的特殊处理 USER *temp; temp=(USER *)malloc(sizeof(USER); temp-next=NULL; int i,j; printf(输入用户名:); scanf(%s,temp-username); printf(n输入密码:);初始化for(i=0;icodei=0; for(i=0;icodei=getch(); printf(*); for(p=head-next;p!=NULL;p=p-next) if(strcmp(p-username,temp-username)=0&strcmp(p-code,temp-code)=0) break; if(p=NULL) printf(n用户名不存在或密码输入错误!n); do 重新注册 while(p=NULL); 用户登录成功else printf(n登入成功!n); 进入日记管理系统menu(p,head1)将USER类型的p和DIA类型的head1传给memu函数 /*查看用户信息(将用户信息从文件中读出)*/void r_to_userfile(USER *head)定义普通变量 rc和指针变量p; 指针p指向日记的头结点head; 打开文件名为USER.txt的文件 若打开成功while(!feof(in) 则依次读取日记信息连接成一条单链表,直到读取完毕; q=(USER *)malloc(sizeof(USER);/申请存放节点 q-next=NULL; rc = fread(q,sizeof(USER),1,in); if(rc!=0)/链接 p-next=q; p=q;(逐条读取) 关闭文件; fclose(in);/*日记管理系统界面*/void menu(USER *p,DIA *head1)变量定义 do 界面 switch(choose) case 1:write(p,head1);/原为 write(head1) break; case 2:search(p,head1); break; case 3:break; 循环控制 while(yes_no = y);/*1.写日记*/void write(USER *q,DIA *head1)/创建链表 定义DIA类型指针变量p,r 为p申请空间 查找到最后一个结点,然后进行插入操作 输入内容 进行链接操作r-next=p 写入文件baocun(q,head1);/*保存日记(将日记写入文件)*/void baocun(USER *q,DIA *head)定义普通变量 rc和指针变量p; 指针p指向日记的第一个结点;打开以该用户的名字命名的txt文件 sprintf(file,%s.txt,q-username); out=fopen(file,w+); 若打开成功 则依次读取日记信息连接成一条单链表,直到读取完毕;for(;p!=NULL;p=p-next) fwrite(p,sizeof(DIA),1,out); 关闭文件; fclose(out); printf(保存成功!n);/*2.按顺序查看日记*/void search(USER *r,DIA *head) 定义变量 将日记信息从文件中读出read(r,head); p=head-next; 判断日记是否存在 若存在,则打印日记内容/*从文件中读出*/void read(USER *r,DIA *head)定义普通变量和指针变量p; 指针p指向日记的第一个结点;打开以该用户的名字命名的txt文件 sprintf(file,%s.txt,q-username); out=fopen(file,w+); 若打开成功 则依次将日记信息连接成一条单链表,直到读取完毕;for(;p!=NULL;p=p-next) rc = fread(q,sizeof(DIA),1,in); 关闭文件; fclose(in); printf(读取成功!n); (4) 程序界面登录界面:注册:登录:写日记:查询日记:五、 调试过程错误1:int main(void) USER *head; head=(USER *)malloc(sizeof(USER); head-next=NULL; r_to_usefile(head);/拼写错误r_to_usefile(head) 错误2head1=(DIA *)malloc(sizeof(DIA);head1-next=NULL; 在用户登录void users(USER *head)函数中未对Head1进行结点申请六、 实验总结: 通过本次实验,对链表的创建,文件的读写有了更深的了解,同时也对函数值的传递有了更进一步的掌握,其实代码分开为每个小代码都比较好写,但要把所有代码连接在一起时,总会出现一些错误没有定义一些变量或变量没有申请空间,所以在本次实验中,程序编写还是有一定的困难的。教师评定签字: 年 月 日 #include#include#include#include#includetypedef struct diary char date20; /日期 char weather20; /天气 char content1000; /日记内容(数据域) struct diary *next; /指针域DIA;/日记数据结构typedef struct user char username20; char code20; /数据域 struct user *next; /指针域USER;/用户数据结构void mainmenu(USER *head);/*保存用户信息(将用户信息写入文件)*/void w_to_usefile(USER *head) FILE *out; USER *p; p=head-next; out=fopen(USER.txt,w+); if(out=NULL)/判断是否为空 printf(Can not open output file!);else for(;p!=NULL;p=p-next) fwrite(p,sizeof(USER),1,out);/sizeof(USER) fclose(out); printf(write to a file ok!n);/*查看用户信息(将用户信息从文件中读出)*/void r_to_userfile(USER *head) FILE *in; int rc; USER *p,*q; p=head; in=fopen(USER.txt,r); if(!in) /文件不存在 printf(Can not open output file.n); else /打开文件 while(!feof(in)/判断是否到结尾 q=(USER *)malloc(sizeof(USER);/申请存放节点 q-next=NULL; rc = fread(q,sizeof(USER),1,in); if(rc!=0)/链接 p-next=q; p=q; fclose(in); printf(read from a file ok!n); /*新用户注册*/void regist(USER *head)/创建链表 USER *p,*q; int i,flag=0; char mima6; p=(USER *)malloc(sizeof(USER); p-next=NULL; do printf(请输入用户名:ntt); scanf(%s,p-username); for(q=head-next;q!=NULL;q=q-next)/判断用户数据结构中是否已经存在该用户名 if(strcmp(q-username,p-username)=0) flag=1; while(q!=NULL); if(flag!=1) for(i=0;icodei=0; printf(请输入六位数密码:ntt); for(i=0;icodei=getch(); printf(*); q=head; while(q-next!=NULL) q=q-next; q-next=p; /连接 printf(nt注册成功!); w_to_usefile(head);/写入文件 else printf(该用户名已经存在!请重新注册!n);/*保存日记(将日记写入文件)*/void baocun(USER *q,DIA *head) char file80; FILE *out; DIA *p; p=head-next; sprintf(file,%s.txt,q-username); out=fopen(file,w+); if(out=NULL) printf(Can not open output file.);else for(;p!=NULL;p=p-next) fwrite(p,sizeof(DIA),1,out); fclose(out); printf(保存成功!n);/*1.写日记*/void write(USER *q,DIA *head1)/创建链表 DIA *p,*r; for(r=head1;r-next!=NULL;r=r-next);/查找到最后一个结点,然后进行插入操作 p=(DIA *)malloc(sizeof(DIA); p-next=NULL; printf(t请输入日期(年-月-日):); scanf(%s,p-date); printf(t请输入天气:); scanf(%s,p-weather); printf(t输入日记内容nt); scanf(%s,p-content); r-next=p;/链接 baocun(q,head1);/*从文件中读出*/void read(USER *r,DIA *head) char file20; FILE *in;int rc; DIA *p,*q; p=head; sprintf(file,%s.txt,r-username); in=fopen(file,a+); if(!in) printf(Can not open the file!n); else while(!feof(in)/判断是否到结尾 q=(DIA *)malloc(sizeof(DIA); q-next=NULL; rc = fread(q,sizeof(DIA),1,in); if(rc!=0) p-next=q;/读出一个 p=q;/指向下一个 fclose(in); printf(读取成功!n); /*2.按顺序查看日记*/void search(USER *r,DIA *head) DIA *p; int i=0; read(r,head); p=head-next; if(p=NULL) printf(您还没写过日记!赶快去写一篇吧!); else while(p!=NULL) printf(第%d篇.日期:%sn 天气:%sn ,i+1,p-date,p-weather); printf( 内容:%2snn,p-content); i+; p=p-next; printf(ttt您的日记记录共有%d篇n,i); /*日记界面*/void menu(USER *p,DIA *head1) char yes_no = 0; DIA *q; int choose; do printf(t|-|n); printf(t|-1/ 写日记-|n); printf(t|-2/查询日记-|n); printf(t|-3/退出-|n); printf(t|-|n); printf(please input your choice:n); printf(ttt请选择(1-3)n); scanf(%d,&choose); switch(choose) case 1:write(p,head1); break; case 2:search(p,head1); break; case 3:break; if (choose = 3) printf(退出!); break; printf(n 要继续选择吗?(Y/N)? n); yes_no = getchar(); if(yes_no=n) printf(退出!n); while(yes_no = y&choose!=3);/*用户登录*/void users(USER *head) DIA *head1; head1=(DIA *)malloc(sizeof(DIA); head1-next=NULL; /申请结点 USER *p; r_to_userfile(head); USER *temp; temp=(USER *)malloc(sizeof(USER); temp-next=NULL; int i,j; printf(输入用户名:); scanf(%s,temp-username); printf(n输入密码:); for(i=0;icodei=0; for(i=0;icodei=getch(); printf(*); for(p=head-next;p!=NULL;p=p-next) if(strcmp(p-username,temp-username)=0&strcmp(p-code,temp-code)=0) b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应商产品质量保证协议书范本6篇
- 赠与合同范例4篇
- 旅游住宿合租合同范本
- 国家管网集团合同范本
- 法院服装采购合同范本
- 长期订单的合同范本
- 关于产权纠纷房屋出租合同3篇
- 纸式工程合同范本
- 第一节 两个计数原理与排列组合2026年高三数学第一轮总复习
- 2025年光缆熔接技能考试题及答案
- 设备厂家生产管理制度
- 培训班教师奖惩管理制度
- 成本加酬金管理制度
- 2025-2030年中国聚烯烃弹性体(POP)行业市场现状供需分析及投资评估规划分析研究报告
- 新学期、新起点、新目标主题班会课件
- 兵团职工面试试题及答案
- 虫媒传染病流行病学调查
- 氟化工艺安全操作课件
- 培智学校家长培训
- 压力容器数字化交付规范 编制说明
- 《九州通医药简介》课件
评论
0/150
提交评论