/*
程序亮点:
(1)实现多用户使用,各用户间数据相互独立。
(2)用户可以更改自己的密码,并且日记的加密是以用户密码来加密的。
(3)在查看日记时,不会一次性将所有符合的日记输出,而是控制一篇一篇输出,而且用
户可以自行控制查看上一篇或是下一篇 ,并且能够方便的删除正在查看的日记。
(4)删除用户的同时会将用户的所有日记删除。
使用说明:
为了便于测试,已建立了用户名为:aaa,密码为:aaa的用户,并且建立了几篇日记。
如果要测试删除用户操作,由于删除用户的同时会将用户的所有日记删除,所以建议不要
删除aaa用户,以免测试数据丢失,可以自行注册一个新用户,再删除。
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 5000 //日记最大长度
#define ESC 27
#define LEN sizeof(diarys)
typedef struct diary //用户与日记共用的结构体
{char other[3][30]; //作为日记时:心情、天气、日期 ; 作为用户时:用户名、密码
char text[MAXSIZE]; //正文
struct diary *next;
int flag;
}diarys,users;
/**************** 函数声明 ******************************************************/
char menu_main(); //主菜单
void login(); //登录用户与用户操作
char menu_diary(); //用户操作菜单
users * login_user(users *puser,char name[],char password[]); //用户登录输入用户名和密码
diarys * new_diary(diarys * head); //新建日记
void input_diary(char text[]); //输入日记
diarys * select_diary(diarys *head); //日记查看
char menu_seek(); //日记查看菜单
void print_node(diarys *p); //输出结点内容
diarys * output_diary(diarys *head); //输出所有激活态结点内容
void shaixuan_other(diarys * head,int i); //以other[i][]筛选结点
int mohu_shaixuan(diarys *p,char text[]); //模糊字符匹配,返回0则没有匹配
void shaixuan_keyword(diarys *head); //按关键字筛选日记
void user_defined(diarys *head); // 用户自定义筛选
void sign_up(); //注册用户
void del_user(); //删除用户
void input_password(char password[]); //输入密码
void change_password(users *puser,users *user1); //更改用户密码
diarys * del_node(diarys * head,diarys * pflag); //删除结点
void activation_diary(diarys * head); //激活所有日记结点
void encrypt_password(char password[]); //加密密码算法
void encrypt_diary(char text[],char password[]); //加密日记算法
void decode_diary(char text[],char password[]); //解密日记算法
void encrypt_alldiary(diarys * head,char password[]); //加密所有日记
void decode_alldiary(diarys * head,char password[]); //解密所有日记
diarys * search_node(diarys * head,char str[],int flag); //以other[flag][]查找结点
diarys * open(char name[]); //打开文件
void save(diarys * head,char name[]); //保存文件
diarys * order_date_down(diarys * head); //按日期降序排列
/**************** 函数实现 ******************************************************/
main()
{ char choose;
printf("使用说明:\n为了便于测试,已建立了用户名为:aaa,密码为:aaa的用户,并且建立了几篇日记。\n");
printf("如果要测试删除用户操作,由于删除用户的同时会将用户的所有日记删除,所以建议不要删除用户aaa,以免测试数据丢失,可以自行注册一个新用户,再删除。");
printf("\n\t\t按任意键进入系统!");
getch();
do
{switch(choose=menu_main())
{case '1':login();break;
case '2':sign_up();break;
case '3':del_user();break;
case ESC:break;
default:printf("\n\t\t输入错误,任意键返回!");
getch();
break;
}
}while(choose!=ESC);
}
char menu_main() //主菜单
{ system("CLS");
printf("\n\t\t|******************************|");
printf("\n\t\t|*** 欢迎使用日记管理系统 ***|");
printf("\n\t\t|******************************|");
printf("\n\t\t|* 1、登录用户 *|");
printf("\n\t\t|* 2、注册用户 *|");
printf("\n\t\t|* 3、删除用户 *|");
printf("\n\t\t|* ESC、退出 *|");
printf("\n\t\t|******************************|");
printf("\n\t\t 请选择: ");
return getche();
}
void login() //登录用户与用户操作
{users *puser,*p;
diarys *head;
char name[30],password[30];
char choose;
printf("\n\t\t\t登录用户:");
puser=open("users");
p=login_user(puser,name,password);
head=open(name);
do
{ if(head!=NULL)
decode_alldiary(head,password); //解密所有日记
switch(choose=menu_diary())
{case '1':head=new_diary(head);break;
case '2':head=select_diary(head);break;
case '3':change_password(puser,p);
strcpy(password,p->other[1]);
break;
case ESC:break;
default:printf("\n\t\t输入错误,任意键返回!");
getch();
break;
}
if(head!=NULL)
encrypt_alldiary(head,password); //加密所有日记
save(head,name); //以用户名为文件名保存文件
}while(choose!=ESC);
}
char menu_diary() //用户操作菜单
{ system("CLS");
printf("\n\t\t|******************************|");
printf("\n\t\t|*** 欢迎使用日记管理系统 ***|");
printf("\n\t\t|******************************|");
printf("\n\t\t|* 1、新建日记 *|");
printf("\n\t\t|* 2、查找日记 *|");
printf("\n\t\t|* 3、修改密码 *|");
printf("\n\t\t|* ESC、返回 *|");
printf("\n\t\t|******************************|");
printf("\n\t\t 请选择: ");
return getche();
}
users * login_user(users *puser,char name[],char password[]) //用户登录输入用户名和密码
{users *p;
printf("\n\t\t输入用户名:");
do
{scanf("%s",name);
p=search_node(puser,name,0); //查找是否存在此用户
if(p==NULL)
printf("\n\t\t不存在该用户名,请重新输入用户名:");
}while(p==NULL);
printf("\n\t\t输入密码(不超过10位):");
do
{input_password(password);
encrypt_password(password); //加密密码
if(strcmp(p->other[1],password)!=0)
printf("\n\t\t密码不一致,请重新输入:");
}while(strcmp(p->other[1],password)!=0);
return p;
}
diarys * new_diary(diarys * head) //新建日记
{ diarys * p;
int i;
p=(diarys *)malloc(LEN);
for(i=0;i<3;i++)
{if(i==0)printf("\n\t\t请输入心情:");
if(i==1)printf("\n\t\t请输入天气:");
if(i==2)printf("\n\t\t请输入日期(如:2009-4-27):");
scanf("%s",p->other[i]);
}
printf("\n请输日记内容(输入\"$\"+\"回车\"结束):\n");
fflush(stdin);
input_diary(p->text); //输入日记内容
printf("\n\t\t日记完成,任意键返回!");
getch();
p->flag=1;
p->next=head;
没有合适的资源?快使用搜索试试~ 我知道了~
一个简单实用个人日记管理系统
共3个文件
dat:2个
c:1个
4星 · 超过85%的资源 需积分: 14 23 下载量 141 浏览量
2009-05-17
10:21:12
上传
评论 2
收藏 7KB RAR 举报
温馨提示
2.程序完成后应该完成如下基本功能: 1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段; 2)使用者必须输入密码; 3)写日记与保存功能; 4)日记查阅:按日期查看,按关键字查看,按顺序查看功能(从某一篇开始) 3.在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能: 1)实现日记的永久存储。 2)对保存的密码进行变换,以免泄密。 3)允许多人使用。 4)在程序的提示语言清晰明确,界面美观并且适用。
资源推荐
资源详情
资源评论
收起资源包目录
.rar (3个子文件)
users.dat 5KB
aaa.dat 25KB
日记管理系统.c 19KB
共 3 条
- 1
资源评论
- phenova2012-04-12很不错~~~页面简洁 思路也清晰~谢谢~
deteihc
- 粉丝: 1
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功