C语言 日记管理系统.docx
- 文档编号:2642724
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:28
- 大小:19.90KB
C语言 日记管理系统.docx
《C语言 日记管理系统.docx》由会员分享,可在线阅读,更多相关《C语言 日记管理系统.docx(28页珍藏版)》请在冰点文库上搜索。
C语言日记管理系统
/*0********日记管理系统**************/
#include
#include
#include
#include
/*1************定义日记结构体*************************/
typedefstructLink1
{
chardate[20];//日期
chartitle[40];//标题
charcontent[1000];//日记内容
charkeyword[20];//关键字,可用空格隔开
inttag;//用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0;
structLink1*nextd;
}Diary;
/*2************定义用户结构体************************/
typedefstructLink2
{
charusername[10];//用户名
charpassword[10];//登录密码
Diary*diarys_list;//该用户拥有的日记链表
structLink2*nextu;
}User;
/*3*********************函数声明************************/
intCreate_NewUser(User*U1);
intDelete_Diary(Diary*D);
intDiary_Operation(User*U2,Diary*D1);
intEnter_Password(charpassword[]);
User*Find_User(User*U1,charusername[]);
Diary*Init_Diary(Diary*D1);
voidInitial_Tag(Diary*D1,inttag);
User*Init_User(User*U1);
intOpen_Diary(Diary*D1);
Diary*Open_DiaryFile(Diary*D1,charFileName[]);
intOpen_File(charFileName[]);
intPrintf_DiaryList(Diary*D1);
voidPrint_Menu1(int*choose1);
voidPrint_Menu2(int*choose2);
voidPrint_Menu3(int*choose3);
intPrintf_users(User*U1);
intSave_Diary(Diary*D1);
intSave_Users_info(User*U1);
intSearch_Diary(Diary*D1);
Diary*Search_order(Diary*D1);
Diary*Filter_word(Diary*D1,charcmpword[],intn);
User*User_Login(User*U1);
intWrite_Diary(Diary*D1);
/*4**********************创建用户链表*********************/
intCreate_NewUser(User*U1)
{
intflag=0;
charpassword2[10];
User*s,*temp;
Diary*D2=NULL;
D2=Init_Diary(D2);
do
{
s=(User*)malloc(sizeof(User));
if(s==NULL)
{
printf("用户创建失败");
return0;
}
printf("\n请输入用户名:
");
scanf("%s",&s->username);
temp=Find_User(U1,s->username);
if(temp==NULL)
{
do
{
printf("\n请输入6位密码:
");
Enter_Password(s->password);
printf("\n请确认密码:
");
Enter_Password(password2);
if(strcmp(s->password,password2)!
=0)
printf("\n密码确认错误\n\n");
}while(strcmp(s->password,password2)!
=0);
s->diarys_list=D2;
s->nextu=U1->nextu;
U1->nextu=s;
flag=0;
Save_Users_info(U1);
printf("\n用户创建成功!
\n");
}
else
{printf("\n\n※※※对不起该用户名已存在※※※\n");
printf("\n是否继续创建用户:
1/0");
scanf("%d",&flag);
}
}while(flag);
return1;
}
/*5****************初始化用户表**********************/
User*Init_User(User*U1)
{
U1=(User*)malloc(sizeof(User));
if(U1!
=NULL)
{
U1->nextu=NULL;
returnU1;
}
else
returnNULL;
}
/*6*******************初始化日记表*******************/
Diary*Init_Diary(Diary*D1)
{
D1=(Diary*)malloc(sizeof(Diary));
if(D1!
=NULL)
{
D1->nextd=NULL;
returnD1;
}
else
returnNULL;
}
/*7**********将所有日记记录的标记tag值置为0或-1*************/
voidInitial_Tag(Diary*D1,inttag)
{
Diary*q;
q=D1->nextd;
while(q!
=NULL)
{
q->tag=tag;
q=q->nextd;
}
}
/*8***********************导入用户信息*******************/
intOpen_Users_info(User*U1)
{
FILE*fp;
User*U2=NULL,*U3=NULL;
Diary*D1=NULL,*D2=NULL;
charfilepn[20],tempstr[80];/*用来存放文件保存路径以及文件名*/
strcpy(filepn,"Users_info.txt");
if((fp=fopen(filepn,"r"))==NULL)//只读
{
printf("※※不能打开文件※※\n");
return0;
}
else
{
fscanf(fp,"%s\n",tempstr);//文本文件格式化输入
while(strcmp(tempstr,"User:
")==0&&(!
feof(fp)))//到了文件末尾,函数值为非真
{
U2=(User*)malloc(sizeof(User));
if(U2==NULL)
{
printf("※※用户空间申请失败※※\n");
return0;
}
else
{
fscanf(fp,"用户名:
%20s\n",U2->username);
fscanf(fp,"密码:
%20s\n",U2->password);
fscanf(fp,"%80s",tempstr);
D1=(Diary*)malloc(sizeof(Diary));
D1=Init_Diary(D1);
U2->diarys_list=D1;
while(strcmp(tempstr,"Diary:
")==0&&(!
feof(fp)))
{
D2=(Diary*)malloc(sizeof(Diary));
if(D2==NULL)
{
printf("日记空间申请失败\n");
return0;
}
else
{
fscanf(fp,"日期:
%s\n",D2->date);
fscanf(fp,"关键字:
%s\n",D2->keyword);
fscanf(fp,"标题:
%s\n",D2->title);
fscanf(fp,"日记内容:
\n%s\n\n",D2->content);
fscanf(fp,"%s\n",tempstr);
D2->tag=0;
D2->nextd=D1->nextd;
D1->nextd=D2;
}
}
U2->nextu=U1->nextu;//U1后插入
U1->nextu=U2;
}
fscanf(fp,"\n\n");
}
}
fclose(fp);
return0;
}
/*9********************显示用户列表**********************/
intPrintf_users(User*U1)
{
intcount=0;
User*p;
p=U1;
printf("\n\n用户信息列表如下:
\n\n");
if(U1->nextu==NULL)
printf("\n没有用户信息\n");
else
{
while(p->nextu!
=NULL)
{
p=p->nextu;
count++;
printf("第%d个用户用户名:
%s\n",count,p->username);
}
}
return1;
}
/*10**************************登录个人用户************************/
User*User_Login(User*U1)//登录成功返回改用户的日记链表指针
{
inti=0;
User*s=NULL,*tempU=NULL;
Printf_users(U1);
s=Init_User(s);
tempU=Init_User(tempU);
printf("\n请输入用户名:
");
scanf("%s",&s->username);
tempU=Find_User(U1,s->username);
if(tempU==NULL)
{
printf("\n该用户不存在\n");
getch();
}
else
{
printf("请输入密码:
");
rewind(stdin);
Enter_Password(s->password);
if(strcmp(tempU->password,s->password)==0)
returntempU;
else
printf("\n密码错误\n");
getch();
}
returnNULL;
}
/*11**********************获取登录口令********************/
intEnter_Password(charpassword[])
{
charpassword1[10];
inti;
for(i=0;i<=5;i++)
{
password1[i]=getch();
password[i]=password1[i];
password1[i]='*';
printf("%c",password1[i]);
}
password[i]='\0';
getch();
rewind(stdin);
return1;
}
/*12*********************查找用户********************/
User*Find_User(User*U1,charusername[])
{
User*q;
q=U1->nextu;
while(q!
=NULL&&strcmp(q->username,username)!
=0)
q=q->nextu;
if(q!
=NULL)
returnq;
else
returnNULL;
}
/*13***********************保存用户信息*******************/
intSave_Users_info(User*U1)
{
FILE*fp;
Diary*D1;
charfilepn[20];/*用来存放文件保存路径以及文件名*/
strcpy(filepn,"Users_info.txt");
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打开文件!
\n");
return0;
}
while(U1->nextu!
=NULL)
{
fprintf(fp,"User:
\n");
U1=U1->nextu;/*下移一个结点*/
fprintf(fp,"用户名:
%s\n密码:
%s\n",U1->username,U1->password);
D1=U1->diarys_list;
while(D1->nextd!
=NULL)
{
D1=D1->nextd;
fprintf(fp,"Diary:
\n");
fprintf(fp,"日期:
%s\n关键字:
%s\n",D1->date,D1->keyword);
fprintf(fp,"标题:
%s\n",D1->title);
fprintf(fp,"日记内容:
\n%s\n",D1->content);
}
}
fclose(fp);
return0;
}
/*14**************打开普通文本文件*******************/
intOpen_File(charFileName[])
{
FILE*fp;
fp=fopen(FileName,"r");//以只读的方式打开文件,将文件指针赋给fp
if(fp==NULL)
{
printf("\n※※无法打开帮助文件※※");
return0;
}
while(feof(fp)==0)//将文件中的字符读入
printf("%c",fgetc(fp));
fclose(fp);
return1;
}
/*15**********************写新的日记*************************/
intWrite_Diary(Diary*D1)
{
inttemp;
Diary*p=NULL;
p=Init_Diary(p);
p=(Diary*)malloc(sizeof(Diary));
printf("\n\n请输入日期(2012-12-12):
");
scanf("%s",&p->date);
printf("\n请输入标题:
");
scanf("%s",&p->title);
printf("\n请开始写日记:
\n\n");
scanf("%s",&p->content);
printf("\n请为该日记写关键字:
");
scanf("%s",&p->keyword);
p->tag=0;
p->nextd=D1->nextd;
D1->nextd=p;
printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("是否要以文件方式保存日记?
1→是0→否");
printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
scanf("%d",&temp);
if(temp==1)
Save_Diary(p);
return1;
}
/*16*********************日记保存***********************/
intSave_Diary(Diary*D1)
{
FILE*fp;
charFileName[40],postfix[6]=".txt\0";
printf("请输入文件路径及文件名:
");
scanf("%s",FileName);
if((fp=fopen(FileName,"w+"))==NULL)
{
printf("打开文件失败!
");
return0;
}
fprintf(fp,"日期:
%s\n",D1->date);
fprintf(fp,"标题:
%s\n",D1->title);
fprintf(fp,"关键字:
%s\n",D1->keyword);
fprintf(fp,"正文如下:
\n%s\n",D1->content);
fclose(fp);
printf("日记文件保存成功!
");
return1;
}
/*17*******************打开并导入日记文件************************/
Diary*Open_DiaryFile(Diary*D1,charFileName[])
{
FILE*fp;
Diary*p=NULL;
if((fp=fopen(FileName,"r"))==NULL)
{
printf("※※文件打开失败※※");
returnNULL;
}
else
{
p=(Diary*)malloc(sizeof(Diary));
if(p==NULL)
{
printf("※※日记创建失败※※");
returnNULL;
}
fscanf(fp,"日期:
%s\n",p->date);
fscanf(fp,"标题:
%s\n",p->title);
fscanf(fp,"关键字:
%s\n",p->keyword);
fscanf(fp,"正文如下:
\n%s\n",p->content);
p->tag=0;
p->nextd=D1->nextd;
D1->nextd=p;
fclose(fp);
returnp;
}
}
/*18**********************日记操作*************************/
intDiary_Operation(User*U2,Diary*D1)
{
chartempch='y';
intchoose2;
charFileName[40];
Diary*p=NULL;
while(tempch=='Y'||tempch=='y')
{
system("cls");
Print_Menu2(&choose2);
switch(choose2)
{
case0:
return0;
case1:
{
Write_Diary(D1);
getch();
}break;
case2:
{
printf("\n请输入文件路径及文件名:
");
scanf("%s",FileName);
p=Open_DiaryFile(D1,FileName);
if(p!
=NULL)
Open_Diary(p);
getch();
}break;
case3:
{
if(Search_Diary(D1)==1)
tempch='y';
}break;//打开帮助文件
case4:
{
tempch='n';
}break;
}
}
return1;
}
/*19************************进入菜单并选择操作************************/
voidPrint_Menu1(int*choose1)
{
printf("\n☆用户管理☆\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃1.用户登录2.注册用户3.保存当前信息4.退出程序┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n请选择操作:
");
scanf("%d",choose1);
rewind(stdin);/*清空键盘缓冲区里的无用字符*/
}
/*20*******************进入日记菜单并选择操作*********************/
voidPrint_Menu2(int*choose2)
{
printf("\n☆日记操作☆\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃1.写日记2.导入日记3.查阅与删除4.返回上层┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n请选择操作:
");
scanf("%d",choose2);
rewind(stdin);/*清空键盘缓冲区里的无用字符*/
}
/*21*******************进入日记查阅菜单并选择操作********************/
voidPrint_Menu3(int*choose3)
{
printf("\n☆日记查阅与删除☆\n");
printf("┏━━━━━━━━━━━━━━━━━━━
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 日记管理系统 语言 日记 管理 系统