日记管理系统c.docx
- 文档编号:9187231
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:25
- 大小:19.81KB
日记管理系统c.docx
《日记管理系统c.docx》由会员分享,可在线阅读,更多相关《日记管理系统c.docx(25页珍藏版)》请在冰豆网上搜索。
日记管理系统c
#include
#include
#include
#include
#defineD_LENsizeof(Diary)
#defineU_LENsizeof(User)
/*********************定义结构体*********************/
typedefstructstu1
{
chardate[20];
charweather[20];
chartitle[50];
charkeyword[20];
charcontent[300];
structstu1*next;
}Diary;
typedefstructstu2
{
charname[20];
charpassword[20];
Diary*elem;
intnum;
structstu2*next;
}User;
/*********************函数原型*********************/
User*User_init();
Diary*Diary_init();
voidUser_Menu(User*head);//用户管理菜单函数
User*User_Add(User*head);//添加用户
User*User_Login(User*head);//用户登录
User*User_Change(User*head);//更改用户信息
User*User_Delete(User*head);//删除用户
Diary*User_Chioce(User*head,User*u);//用户选择
Diary*Diary_Menu(User*u,inttemp);//日记管理菜单函数,temp记录是否为自己的日记
User*Diary_Create(User*u,inttemp);//写日记
Diary*Xuanze_Sort(Diary*head,intnum);//按日期选择排序
User*Diary_Delete(User*u,inttemp);//删除日记
voidDiary_Search_Menu(Diary*head,intnum);//查看日记菜单
voidDiary_Search_by_Orde(Diary*head,intnum);//按顺序查找
voidDiary_Search_by_Keyword(Diary*head);//按关键字查找
voidDiary_Search_by_Date(Diary*head);//按日期查找
User*Read_File();//读取文件
voidSave_File(User*head);//保存文件
/*********************主函数*********************/
intmain()
{
User*head;
head=User_init();
User_Menu(head);
return0;
}
/*********************初始化函数*********************/
User*User_init()//初始化
{
returnNULL;
}
Diary*Diary_init()
{
returnNULL;
}
/*********************用户菜单函数*********************/
voidUser_Menu(User*head)
{
intchioce=1;
printf("\n欢迎进入日记管理系统\n");
printf("\n按任一键进入主菜单......");
getch();
head=User_init();
head=Read_File();//读取文件
while(chioce)
{
system("cls");
printf("---------------------------------------------\n");
printf("|用户信息管理|\n");
printf("---------------------------------------------\n");
printf("|1.添加用户信息|\n");
printf("|2.用户登录|\n");
printf("|3.更改用户信息|\n");
printf("|4.删除用户|\n");
printf("|5.保存用户信息|\n");
printf("|0.退出该系统|\n");
printf("---------------------------------------------\n");
printf("输入你的选择(1~8):
\n");
scanf("%d",&chioce);
switch(chioce)
{
case1:
head=User_Add(head);break;
case2:
head=User_Login(head);break;
case3:
head=User_Change(head);break;
case4:
head=User_Delete(head);break;
case5:
Save_File(head);break;
case0:
exit(0);break;
default:
printf("没有该选项!
\n");
}
}
}
/*********************添加用户*********************/
User*User_Add(User*head)
{
User*p,*q;
intflag;
chartemp_password[20];
system("cls");
do
{
p=(User*)malloc(U_LEN);//申请内存
q=head;
A:
printf("\n\t输入用户名:
\t");
scanf("%s",p->name);
while(q!
=NULL)//判断该用户是否存在
{
if(strcmp(p->name,q->name)==0)
{
printf("\n\n该用户已存在,请重新输入。
。
。
。
");
gotoA;
}
q=q->next;
}
B:
printf("\n\t请输入密码:
\t");//输入密码并密码加密
scanf("%s",p->password);
printf("\n\t请再次输入密码:
\t");
scanf("%s",temp_password);
if(strcmp(temp_password,p->password)!
=0)
{
printf("\n\t密码不匹配!
\n\t\t\t请重新输入.....\n\n");
gotoB;
}
p->elem=Diary_init();
p->num=0;
p->next=head;//进行前插
head=p;
printf("\n\t创建用户成功!
\n");
printf("\n\t\t\t继续添加用户?
是
(1)/否(0)");
scanf("%d",&flag);
}while(flag!
=0);
return(head);
}
/*********************用户登录*********************/
User*User_Login(User*head)
{
User*p;
intflag;
chartemp_name[20],temp_password[20];
system("cls");
A:
printf("\n\t输入用户名:
\t");
scanf("%s",temp_name);
printf("\n\t输入密码:
\t");
scanf("%s",temp_password);
p=head;
while(p!
=NULL)
{
if(strcmp(p->name,temp_name)==0&&strcmp(p->password,temp_password)==0)//寻找符合条件的用户
break;
p=p->next;
}
if(p!
=NULL)//存在符合条件的用户
{
printf("\n\t\t\t登陆成功!
\n");
system("PAUSE");
B:
p->elem=User_Chioce(head,p);//进入用户选择菜单
printf("\n\n\t是
(1)否(0)继续查看其他用户日记?
\n");
scanf("%d",&flag);
if(flag==1)
gotoB;
else
return(head);
}
else//不存在符合条件的用户
{
printf("\n\t该用户不存在或密码错误\n");
printf("\t是
(1)否(0)继续登录?
");
scanf("%d",&flag);
if(flag==1)
gotoA;
else
return(head);
}
}
/*********************更改用户信息*********************/
User*User_Change(User*head)
{
User*p;
charpassword[20],temp_password[20],temp_name[20],c;
system("cls");
printf("\n\t输入要更改用户信息的用户名:
\t");
scanf("%s",temp_name);
printf("\n\t输入该用户密码:
\t");
scanf("%s",temp_password);
p=head;
while(p!
=NULL)//寻找符合条件的用户
{
if(strcmp(p->name,temp_name)==0&&strcmp(p->password,temp_password)==0)break;
p=p->next;
}
if(p!
=NULL)//存在符合条件的用户
{
printf("\n\t输入新的用户名:
\t");
scanf("%s",temp_name);
A:
printf("\n\t请输入新密码:
\t");
scanf("%s",password);
printf("\n\t请再次输入:
\t");
scanf("%s",temp_password);
if(strcmp(password,temp_password)!
=0)
{
printf("\n\t密码不匹配!
请重新输入.....\n\n");
gotoA;
}
printf("\n是否要更改该用户信息,输入Y更改,N则退出?
");//确认是否更改
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N')break;
if(c=='y'||c=='Y')
{
strcpy(p->name,temp_name);
strcpy(p->password,temp_password);
printf("\n用户信息已被更改\n");
system("PAUSE");
break;
}
}
}
else
{//不存在符合条件的用户
printf("\n用户%s不存在\n",temp_name);
system("PAUSE");
}
return(head);
}
/*********************删除用户*********************/
User*User_Delete(User*head)
{
User*p1,*p2;
chartemp_password[20],temp_name[20],c;
system("cls");
printf("\n\t输入要删除的用户名:
\t");
scanf("%s",temp_name);
printf("\n\t输入该用户密码:
\t");
scanf("%s",temp_password);
p1=p2=head;
while(p1!
=NULL)//寻找符合条件的用户
{
if(strcmp(p1->name,temp_name)==0&&strcmp(p1->password,temp_password)==0)
break;
p2=p1;
p1=p1->next;
}
if(p1!
=NULL)//存在符合条件的用户
{
printf("\n该用户为:
\t%s",p1->name);
printf("\n是否要删除,输入Y删除,N则退出?
\n");//确认是否删除
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N')break;
if(c=='y'||c=='Y')
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("\n用户%s以被删除\n",temp_name);
printf("别忘了保存.\n");
system("PAUSE");
break;
}
}
}
else
{//不存在符合条件的用户
printf("\n用户%s不存在\n",temp_name);
system("PAUSE");
}
return(head);
}
/*********************用户选择*********************/
Diary*User_Chioce(User*head,User*u)
{
chartemp_name[20],temp_password[20];
inttemp;
User*p,*q;
p=head;
system("cls");
printf("系统用户有:
\n");//列出系统的所有用户的用户名
while(p!
=NULL)
{
printf("%s\n",p->name);
p=p->next;
}
A:
q=head;
printf("输入您要查看的日记所属的用户名:
\n");
scanf("%s",temp_name);
while(q!
=NULL)//寻找符合条件的用户
{
if(strcmp(temp_name,q->name)==0)
break;
q=q->next;
}
if(q==NULL)//不存在符合条件的用户
{
printf("不存在该用户,重新输入!
!
\n");
gotoA;
}
else//存在符合条件的用户
{
if(q->name==u->name)//查看自己日记时
temp=1;
else//查看他人日记时
temp=0;
q->elem=Diary_Menu(q,temp);
}
return(q->elem);
}
/*********************日记菜单函数*********************/
Diary*Diary_Menu(User*u,inttemp)
{
charflag='0';
while
(1)
{
system("cls");
printf("-----------------------------------------\n");
printf("|日记管理|\n");
printf("-----------------------------------------\n");
printf("|1.写日记|\n");
printf("|2.删除日记|\n");
printf("|3.查看日记|\n");
printf("-----------------------------------------\n");
printf("输入你的选择(1~3):
\n");
flag=getche();
switch(flag)
{
case'1':
printf("\n");
u=Diary_Create(u,temp);
break;
case'2':
printf("\n");
u=Diary_Delete(u,temp);
break;
case'3':
printf("\n");
Diary_Search_Menu(u->elem,u->num);
break;
}
getchar();
printf("\n\n\t是否继续进行该用户日记操作?
(y/n)");
if(getchar()=='n'||getchar()=='N')
{
break;
}
}
return(u->elem);
}
/*********************写新日记*********************/
User*Diary_Create(User*u,inttemp)
{
Diary*p=NULL;
intflag;
chartemp_password[20];
system("cls");
if(temp==0)//日记为他人的时候,进行密码输入与确认
{
A:
printf("\n\n\t这是%s的日记,不属于您,请输入该用户的密码:
",u->name);
scanf("%s",temp_password);
if(strcmp(u->password,temp_password)!
=0)
{
printf("\n\t密码错误,无权写入!
是
(1)否(0)继续?
");
scanf("%d",&flag);
if(flag==0)
return(u);
else
{
system("cls");
gotoA;
}
}
}
do
{
p=(Diary*)malloc(D_LEN);//申请内存
printf("\n\t输入天气:
\t");
scanf("%s",p->weather);
printf("\n\t输入日期(如2010-01-01):
\t");
scanf("%s",p->date);
printf("\n\t输入标题:
\t");
scanf("%s",p->title);
printf("\n\t输入关键字:
\t");
scanf("%s",p->keyword);
printf("\n\t内容:
\t");
scanf("%s",p->content);
p->next=u->elem;//进行前插
u->elem=p;
u->num++;//日记数记录
printf("\n写下一篇日记?
是
(1)否(0)");
scanf("%d",&flag);
}while(flag);
u->elem=Xuanze_Sort(u->elem,u->num);
return(u);
}
/*********************按日期选择排序*********************/
Diary*Xuanze_Sort(Diary*head,intnum)
{
inti;
Diary*p,*p1,*p2,*temp,*flag;
p=p2=head;//记录链表的头
for(i=0;i { temp=p1=head;//记录要查找链表的开始点 while(p1->next! =NULL)//找到要查找链表段的最小节点 { if(strcmp(temp->date,p1->next->date)>0) { flag=p1; temp=p1->next; } p1=p1->next; } if(i==0)//记录第一次找到的最小节点 p=p2=temp; if(temp==head)//找出的小数等于寻找开头的那个数时 { p2=head; head=head->next; } else//找出的小数不是寻找开头的那个数时 { flag->next=temp->next; p2->next=temp; temp->next=head; p2=p2->next; } } return(p); } /*********************删除日记*********************/ User*Diary_Delete(User*u,inttemp) { chartemp_date[20],temp_password[20]; intflag,n; Diary*p,*p1,*p2; p=p1=p2=u->elem; system("cls"); if(u->num==0) { printf("\n\t该用户没有日记"); system("PAUSE"); return(u); } printf("\n\t用户%s的日记有: \n",u->name);//列出所在用户的所有日记 printf("%20s%20s\n\n\n","关键字","日期"); while(p! =NULL) { printf("%20s%20s\n",p->title,p->date); p=p->next; } A: printf("输入你要删除的日记的日期: \n"); scanf("%s",temp_date); while(strcmp(temp_date,p1->date)&&p1! =NULL)//查找符合条件的记录 { p2=p1; p1=p1->next; } if(strcmp(temp_date,p1->date)==0)//存在符合条件的记录时 { if(temp==0)//他人日记时,进行密码输入与确认 { B: printf("您要删的是%s的日记,不属于您,请输入该用户的密码: \n",u->name); scanf("%s",temp_password); if(strcmp(u->password,temp_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日记 管理 系统