1、C语言 日记管理系统/* 0 *日记管理系统*/#include#include#include #include /* 1*定义日记结构体*/typedef struct Link1 char date20; / 日期 char title40; / 标题 char content1000; / 日记内容 char keyword20; / 关键字,可用空格隔开 int tag; / 用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0; struct Link1 *nextd; Diary;/* 2 *定义用户结构体*/typedef struct Link2 char usern
2、ame10; / 用户名 char password10; / 登录密码 Diary *diarys_list; /该用户拥有的日记链表 struct Link2 *nextu;User;/* 3 *函数声明*/ int Create_NewUser(User *U1); int Delete_Diary(Diary *D); int Diary_Operation(User *U2,Diary *D1); int Enter_Password(char password); User *Find_User(User *U1,char username); Diary *Init_Diary(
3、Diary *D1); void Initial_Tag(Diary *D1,int tag); User *Init_User(User *U1); int Open_Diary(Diary *D1); Diary *Open_DiaryFile(Diary *D1,char FileName); int Open_File(char FileName); int Printf_DiaryList(Diary *D1); void Print_Menu1(int *choose1); void Print_Menu2(int *choose2); void Print_Menu3(int *
4、choose3); int Printf_users(User *U1); int Save_Diary(Diary *D1); int Save_Users_info(User *U1); int Search_Diary(Diary *D1); Diary *Search_order(Diary *D1); Diary *Filter_word(Diary *D1,char cmpword,int n); User *User_Login(User *U1); int Write_Diary(Diary *D1);/* 4 *创建用户链表*/int Create_NewUser(User
5、*U1) int flag=0; char password210; User *s,*temp; Diary *D2=NULL; D2=Init_Diary(D2); do s=(User *)malloc(sizeof(User); if(s=NULL) printf( 用户创建失败); return 0; printf(n 请输入用户名: ); scanf(%s,&s-username); temp=Find_User(U1,s-username); if(temp=NULL) do printf(n 请输入6位密码: ); Enter_Password(s-password); pri
6、ntf(n 请确认密码: ); Enter_Password(password2); if(strcmp(s-password,password2)!=0) printf(n 密码确认错误nn); 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(nn 对不起该用户名已存在n); printf(n 是否继续创建用户:1/0 ); scanf(%d,&
7、flag); while(flag); return 1;/* 5 *初始化用户表*/User *Init_User(User *U1) U1=(User *)malloc(sizeof(User); if(U1!=NULL) U1-nextu=NULL; return U1; else return NULL;/* 6 *初始化日记表*/Diary *Init_Diary(Diary *D1) D1=(Diary *)malloc(sizeof(Diary); if(D1!=NULL) D1-nextd=NULL; return D1; else return NULL;/* 7 *将所有日
8、记记录的标记tag值置为0或-1*/void Initial_Tag(Diary *D1,int tag) Diary *q; q=D1-nextd; while(q!=NULL) q-tag=tag; q=q-nextd; /* 8 *导入用户信息*/int Open_Users_info(User *U1) FILE *fp; User *U2=NULL,*U3=NULL; Diary *D1=NULL,*D2=NULL; char filepn20,tempstr80;/*用来存放文件保存路径以及文件名*/ strcpy(filepn,Users_info.txt); if(fp=fop
9、en(filepn,r)=NULL) /只读 printf(不能打开文件n); return 0; else fscanf(fp,%sn,tempstr); /文本文件格式化输入 while(strcmp(tempstr,User:)=0&(!feof(fp) /到了文件末尾,函数值为非真 U2=(User *)malloc(sizeof(User); if(U2=NULL) printf( 用户空间申请失败n); return 0; else fscanf(fp,用户名:%20sn,U2-username); fscanf(fp,密码:%20sn,U2-password); fscanf(f
10、p,%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); return 0; else fscanf(fp, 日期: %sn,D2-date); fscanf(fp, 关键字: %sn,D2-keyword); fscanf(fp, 标题: %sn,D2-titl
11、e); fscanf(fp, 日记内容: n%snn,D2-content); fscanf(fp,%sn,tempstr); D2-tag=0; D2-nextd=D1-nextd; D1-nextd=D2; U2-nextu=U1-nextu; /U1后插入 U1-nextu=U2; fscanf(fp,nn); fclose(fp); return 0; /* 9 *显示用户列表*/int Printf_users(User *U1) int count=0; User *p; p=U1; printf(nn 用户信息列表如下:nn); if(U1-nextu=NULL) printf(
12、n 没有用户信息n); else while(p-nextu!=NULL) p=p-nextu; count+; printf( 第%d个用户 用户名:%sn,count,p-username); return 1;/* 10 *登录个人用户*/User *User_Login(User *U1) / 登录成功返回改用户的日记链表指针 int i=0; User *s=NULL,*tempU=NULL; Printf_users(U1); s=Init_User(s); tempU=Init_User(tempU); printf(n 请输入用户名: ); scanf(%s,&s-userna
13、me); 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) return tempU; else printf(n 密码错误n); getch(); return NULL;/* 11 *获取登录口令*/int Enter_Password(char password) char pas
14、sword110; int i; for(i=0;inextu; while(q!=NULL&strcmp(q-username,username)!=0) q=q-nextu; if(q!=NULL) return q; else return NULL;/* 13 *保存用户信息*/int Save_Users_info(User *U1) FILE *fp; Diary *D1; char filepn20; /*用来存放文件保存路径以及文件名*/ strcpy(filepn,Users_info.txt); if(fp=fopen(filepn,w+)=NULL) printf(不能打
15、开文件!n); return 0; while(U1-nextu!=NULL) fprintf(fp,User:n); U1=U1-nextu; /*下移一个结点*/ fprintf(fp,用户名:%sn密码:%sn,U1-username,U1-password); D1=U1-diarys_list; while(D1-nextd!=NULL) D1=D1-nextd; fprintf(fp,Diary:n); fprintf(fp,日期:%sn关键字: %sn,D1-date,D1-keyword); fprintf(fp,标题:%sn,D1-title); fprintf(fp,日记内
16、容:n%sn,D1-content); fclose(fp); return 0; /* 14 *打开普通文本文件*/int Open_File(char FileName) FILE *fp; fp=fopen(FileName,r); / 以只读的方式打开文件,将文件指针赋给fp if(fp=NULL) printf (n 无法打开帮助文件); return 0; while(feof(fp)=0) / 将文件中的字符读入 printf(%c,fgetc(fp); fclose(fp); return 1; /* 15 *写新的日记*/int Write_Diary(Diary *D1)
17、int temp; Diary *p=NULL; p=Init_Diary(p); p=(Diary *)malloc(sizeof(Diary); printf(nn 请输入日期(2012-12-12): ); scanf(%s,&p-date); printf(n 请输入标题: ); scanf(%s,&p-title); printf(n 请开始写日记:nn ); scanf(%s,&p-content); printf(n 请为该日记写关键字: ); scanf(%s,&p-keyword); p-tag=0; p-nextd=D1-nextd; D1-nextd=p; printf(
18、n n); printf( 是否要以文件方式保存日记? 1是 0否 ); printf(n n); scanf(%d,&temp); if(temp=1) Save_Diary(p); return 1; /* 16 *日记保存*/int Save_Diary(Diary *D1) FILE *fp; char FileName40,postfix6=.txt0; printf( 请输入文件路径及文件名:); scanf(%s,FileName); if(fp=fopen(FileName,w+)=NULL) printf( 打开文件失败!); return 0; fprintf(fp, 日期
19、: %sn,D1-date); fprintf(fp, 标题: %sn,D1-title); fprintf(fp, 关键字: %sn,D1-keyword); fprintf(fp, 正文如下:n %sn,D1-content); fclose(fp); printf( 日记文件保存成功!); return 1;/* 17 *打开并导入日记文件*/Diary *Open_DiaryFile(Diary *D1,char FileName) FILE *fp; Diary *p=NULL; if(fp=fopen(FileName,r)=NULL) printf( 文件打开失败); retur
20、n NULL; else p=(Diary *)malloc(sizeof(Diary); if(p=NULL) printf( 日记创建失败); return NULL; fscanf(fp, 日期: %sn,p-date); fscanf(fp, 标题: %sn,p-title); fscanf(fp, 关键字: %sn,p-keyword); fscanf(fp, 正文如下:n %sn,p-content); p-tag=0; p-nextd=D1-nextd; D1-nextd=p; fclose(fp); return p; /* 18 *日记操作*/int Diary_Operat
21、ion(User *U2,Diary *D1) char tempch=y; int choose2; char FileName40; Diary *p=NULL; while(tempch=Y|tempch=y) system(cls); Print_Menu2(&choose2); switch(choose2) case 0: return 0; case 1: Write_Diary(D1); getch(); break; case 2: printf(n 请输入文件路径及文件名:); scanf(%s,FileName); p=Open_DiaryFile(D1,FileName
22、); if(p!=NULL) Open_Diary(p); getch(); break; case 3: if(Search_Diary(D1)=1) tempch=y; break; /打开帮助文件 case 4: tempch=n; break; return 1; /* 19 *进入菜单并选择操作*/ void Print_Menu1(int *choose1) printf(n 用户管理 n); printf(n); printf( 1.用户登录 2.注册用户 3.保存当前信息 4.退出程序 n); printf(n); printf(n 请选择操作: ); scanf(%d,cho
23、ose1); rewind(stdin); /*清空键盘缓冲区里的无用字符*/ /* 20*进入日记菜单并选择操作*/ void Print_Menu2(int *choose2) printf(n 日记操作 n); printf(n); printf( 1.写日记 2.导入日记 3.查阅与删除 4.返回上层 n); printf(n); printf(n 请选择操作: ); scanf(%d,choose2); rewind(stdin); /*清空键盘缓冲区里的无用字符*/* 21 *进入日记查阅菜单并选择操作*/ void Print_Menu3(int *choose3) printf(n 日记查阅与删除 n); printf(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1