实验题目:
设计一个简单实用个人日记管理系统。
实验要求:
1.该实验的课内学时是4个课时。
2.程序完成后应该完成如下基本功能:
1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段;
2)使用者必须输入密码;
3)写日记与保存功能;
4)日记查阅:按日期查看,按关键字查看,按顺序查看功能(从某一篇开始)
3.在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:
1)实现日记的永久存储。
2)对保存的密码进行变换,以免泄密。
3)允许多人使用。
4)在程序的提示语言清晰明确,界面美观并且适用。
/* 0 ********学生信息管理系统**************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define ESC 27 //退出键
#define Enter 13 //回车键
#define BackSpace 8
/* 1************定义日记结构体*************************/
typedef struct Link1
{ char date[10]; //日期 格式2009-12-30
char title[40]; //标题
char content[1000]; //日记内容
char keyword[20]; //关键字,可用空格隔开
int tag; //用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0;
struct Link1 *nextd;
} Diary;
/* 2 ************定义用户结构体************************/
typedef struct Link2
{ char username[25]; //用户名
char password[16]; //登录密码
Diary *diarys_list; //该用户拥有的日记链表
struct Link2 *nextu;
} User;
/* 3 *********************函数声明************************/
int Change_Password(User *U2);
int Create_NewUser(User *U1);
int Delete_Diary(Diary *D);
int Diary_Operation(User *U2,Diary *D1);
int Encrypt_Password(char password[]);
int Enter_Password(char password[]);
User *Find_User(User *U1,char username[]);
Diary *Init_Diary(Diary *D1);
void Initial_Tag(Diary *D1,int tag);
User *Init_User(User *U1);
int Input_Choose();
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 *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);
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define ESC 27 //退出键
#define Enter 13 //回车键
#define BackSpace 8
/* 1************定义日记结构体*************************/
typedef struct Link1
{ char date[10]; //日期 格式2009-12-30
char title[40]; //标题
char content[1000]; //日记内容
char keyword[20]; //关键字,可用空格隔开
int tag; //用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0;
struct Link1 *nextd;
} Diary;
/* 2 ************定义用户结构体************************/
typedef struct Link2
{ char username[25]; //用户名
char password[16]; //登录密码
Diary *diarys_list; //该用户拥有的日记链表
struct Link2 *nextu;
} User;
/* 3 *********************函数声明************************/
int Change_Password(User *U2);
int Create_NewUser(User *U1);
int Delete_Diary(Diary *D);
int Diary_Operation(User *U2,Diary *D1);
int Encrypt_Password(char password[]);
int Enter_Password(char password[]);
User *Find_User(User *U1,char username[]);
Diary *Init_Diary(Diary *D1);
void Initial_Tag(Diary *D1,int tag);
User *Init_User(User *U1);
int Input_Choose();
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 *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 Change_Password(User *U2)
{ char oldpw[16],newpw1[16],newpw2[16];
do
{
printf("\n\t请输入旧密码:\t");
Enter_Password(oldpw);
Encrypt_Password(oldpw);
if(strcmp(U2->password,oldpw)!=0)
printf("\n\t旧密码输入错误!....\n\n");
}while(strcmp(U2->password,oldpw)!=0);
do
{
printf("\n\t请输入新密码:\t");
Enter_Password(newpw1);
printf("\n\t请确认新密码:\t");
Enter_Password(newpw2);
if(strcmp(newpw1,newpw2)!=0)
printf("\n\t密码确认错误!....\n\n");
}while(strcmp(newpw1,newpw2)!=0);
Encrypt_Password(newpw1);
strcpy(U2->password,newpw1);
printf("\n\n\t密码修改成功!......");
return 1;
}
/* 5 **********************创建用户链表*********************/
int Create_NewUser(User *U1)
{ int flag=0;
char password2[16];
User *s,*temp;
Diary *D2=NULL;
D2=Init_Diary(D2);
do
{
s=(User *)malloc(sizeof(User));
if(s==NULL)
{
printf("\t用户创建失败!");
return 0;
}
printf("\n\t请输入用户名:\t");
scanf("%s",&s->username);
temp=Find_User(U1,s->username);
if(temp==NULL)
{
do
{
printf("\n\t请输入密码:\t");
Enter_Password(s->password);
printf("\n\t请确认密码:\t");
Enter_Password(password2);
if(strcmp(s->password,password2)!=0)
printf("\n\t密码确认错误!....\n\n");
}while(strcmp(s->password,password2)!=0);
Encrypt_Password(s->password);
s->diarys_list=D2;
s->nextu=U1->nextu;
U1->nextu=s;
flag=0;
printf("\n\t用户创建成功!......\n");
}
else
{printf("\n\n\t***对不起**该用户名已存在!!!!\n");
printf("\n\t是否继续创建用户:1/0\t");
scanf("%d",&flag);
}
} while(flag);
return 1;
}
/* 6 *************************删除日记**********************/
int Delete_Diary(Diary *D)
{ Diary *p;
p=D->nextd;
D->nextd=p->nextd;
free(p);
printf("\n\t日记删除成功......");
return 1;
}
/* 7 **********************日记操作*************************/
int Diary_Operation(User *U2,Diary *D1)
{ char tempch='1';
int choose2;
char FileName[40];
Diary *p=NULL;
while(tempch!=ESC)
{
system("cls");
printf("\n\t\t\t欢迎用户---“%s”的到来!......\n\n",U2->username);
Print_Menu2(&choose2);
switch(choose2)
{ case 0:return 0;
case 1:{Write_Diary(D1);
tempch=getch();}break;
case 2:{ printf("\n\t参考文件: 听雨的思索.txt");
printf("\n\t请输入文件路径及文件名:");
scanf("%s",FileName);
p=Open_DiaryFile(D1,FileName);
if(p!=NULL)
int Change_Password(User *U2)
{ char oldpw[16],newpw1[16],newpw2[16];
do
{
printf("\n\t请输入旧密码:\t");
Enter_Password(oldpw);
Encrypt_Password(oldpw);
if(strcmp(U2->password,oldpw)!=0)
printf("\n\t旧密码输入错误!....\n\n");
}while(strcmp(U2->password,oldpw)!=0);
do
{
printf("\n\t请输入新密码:\t");
Enter_Password(newpw1);
printf("\n\t请确认新密码:\t");
Enter_Password(newpw2);
if(strcmp(newpw1,newpw2)!=0)
printf("\n\t密码确认错误!....\n\n");
}while(strcmp(newpw1,newpw2)!=0);
Encrypt_Password(newpw1);
strcpy(U2->password,newpw1);
printf("\n\n\t密码修改成功!......");
return 1;
}
/* 5 **********************创建用户链表*********************/
int Create_NewUser(User *U1)
{ int flag=0;
char password2[16];
User *s,*temp;
Diary *D2=NULL;
D2=Init_Diary(D2);
do
{
s=(User *)malloc(sizeof(User));
if(s==NULL)
{
printf("\t用户创建失败!");
return 0;
}
printf("\n\t请输入用户名:\t");
scanf("%s",&s->username);
temp=Find_User(U1,s->username);
if(temp==NULL)
{
do
{
printf("\n\t请输入密码:\t");
Enter_Password(s->password);
printf("\n\t请确认密码:\t");
Enter_Password(password2);
if(strcmp(s->password,password2)!=0)
printf("\n\t密码确认错误!....\n\n");
}while(strcmp(s->password,password2)!=0);
Encrypt_Password(s->password);
s->diarys_list=D2;
s->nextu=U1->nextu;
U1->nextu=s;
flag=0;
printf("\n\t用户创建成功!......\n");
}
else
{printf("\n\n\t***对不起**该用户名已存在!!!!\n");
printf("\n\t是否继续创建用户:1/0\t");
scanf("%d",&flag);
}
} while(flag);
return 1;
}
/* 6 *************************删除日记**********************/
int Delete_Diary(Diary *D)
{ Diary *p;
p=D->nextd;
D->nextd=p->nextd;
free(p);
printf("\n\t日记删除成功......");
return 1;
}
/* 7 **********************日记操作*************************/
int Diary_Operation(User *U2,Diary *D1)
{ char tempch='1';
int choose2;
char FileName[40];
Diary *p=NULL;
while(tempch!=ESC)
{
system("cls");
printf("\n\t\t\t欢迎用户---“%s”的到来!......\n\n",U2->username);
Print_Menu2(&choose2);
switch(choose2)
{ case 0:return 0;
case 1:{Write_Diary(D1);
tempch=getch();}break;
case 2:{ printf("\n\t参考文件: 听雨的思索.txt");
printf("\n\t请输入文件路径及文件名:");
scanf("%s",FileName);
p=Open_DiaryFile(D1,FileName);
if(p!=NULL)