📄 app1.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//用户信息对象
typedef struct UserInfo
{
char UserID[20];
char UserPWD[20];
char Potency[20];
struct UserInfo *next;
}UserNode;
//用户信息链表
struct UserList
{
UserNode *head;
};
//Sex,EducationStatus,LastSchool编码表
typedef struct Sex
{
char sSex[4];
char sSexCode[4];
struct Sex *next;
}SexNode;
//性别链表
struct SexList
{
struct Sex *head;
};
typedef struct EducationStatus
{
char sEStatus[20];
char sEStatusCode[5];
struct EducationStatus* next;
}EStatusNode;
//受教育信息链表
struct EStatusList
{
EStatusNode *head;
};
typedef struct LastSchool
{
char sLSchool[20];
char sLSchoolCode[5];
struct LastSchool* next;
}LastSchoolNode;
//毕业学校信息链表
struct LastSchoolList
{
LastSchoolNode *head;
};
char UserID[20]; //用户名
char UserPWD[20]; //用户密码
char *sysCodeNamedTable[3]; //用户权限
UserList *pMyUserList;
SexList *pMySexList;
EStatusList *pMyEStatusList;
LastSchoolList *pMyLastSchoolList;
UserList* Initialization(); //系统初始化函数
int ErrorReport(char *,char *); //错误报告表函数
void UserLogin(); //用户登录
int ExitApp(); //系统退出
char* JudgePermission(); //判断权限
void AdmModule(); //管理员控制模块
void UserManagement(); //用户管理模块
int isUserExisted(char *); //判断用户是否存在
void AppendUser(); //添加用户
int ModifyPWD(); //修改用户口令
int DelUserInfo(); //删除用户
void DispUserInfo(); //显示用户信息
void CodeManagement(); //编码管理模块
void CodeControl(); //编码控制模块
void SexCodeManagement(); //性别编码管理
int isSexCodeExisted(char *); //判断性别编码是否重复
void FindSexCode(); //检索性别编码表
void AppendSexCode(); //添加性别编码
void ModifySexCode(); //修改性别编码
void DelSexCode(); //删除性别编码
void DispSexCode(); //显示性别编码表
void EStatusCodeManagement(); //教育状况编码管理
int isEStatusCodeExisted(char *); //判断教育状况编码是否重复
void FindEStatusCode(); //检索教育状况编码表
void AppendEStatusCode(); //添加教育状况编码
void ModifyEStatusCode(); //修改教育状况编码
void DelEStatusCode(); //删除教育状况编码
void DispEStatusCode(); //显示教育状况编码表
void LastSchoolCodeManagement(); //最后毕业学校编码管理
int isLastSchoolCodeExisted(char *); //判断最后毕业学校编码是否重复
void FindLastSchoolCode(); //检索最后毕业学校编码表
void AppendLastSchoolCode(); //添加最后毕业学校编码
void ModifyLastSchoolCode(); //修改最后毕业学校编码
void DelLastSchoolCode(); //删除最后毕业学校编码
void DispLastSchoolCode(); //显示最后毕业学校编码表
//系统初始化
UserList* Initialization()
{
UserNode *Init_pNode;
SexNode *Init_pSNode;
EStatusNode *Init_pENode;
LastSchoolNode *Init_pLNode;
printf("系统正在初始化...\n");
//创建带头结点的单向链表
pMyUserList=(UserList*)malloc(sizeof(UserList));
if( pMyUserList==NULL )
{
printf("Memory assign fail!\n!");
ErrorReport("Initialization","Memory assign fail!!");
exit(1);
}
else
{
//建立头结点
pMyUserList->head =(UserNode*)malloc(sizeof(UserNode));
pMyUserList->head->next=NULL;
}
// 从"用户表"逐条读取数据
FILE *fp;
if( (fp=fopen("UserInfo.dat","r"))==NULL ) //打开用户信息表文件
{
printf("can't open file UserInfo.dat\n");
ErrorReport("Initialization","can't open file UserInfo.dat");
exit(1);
}
else
{
Init_pNode=(UserNode*)malloc(sizeof(UserNode));
if( Init_pNode==NULL)
{
printf("Memory assign fail!!");
exit(1);
}
else
{
while( fread(Init_pNode,sizeof(UserNode)-4,1,fp)==1 )
{
Init_pNode->next=NULL;
Init_pNode->next=pMyUserList->head->next;
pMyUserList->head->next=Init_pNode;
Init_pNode=(UserNode*)malloc(sizeof(UserNode));
}
free(Init_pNode);
fclose(fp);
//初始化用户信息对象
strcpy(UserID,"");
strcpy(UserPWD,"");
sysCodeNamedTable[0]="Sex.dat";
sysCodeNamedTable[1]="EducationStatus.dat";
sysCodeNamedTable[2]="LastSchool.dat";
//构造性别编码表对象
if( (fp=fopen(sysCodeNamedTable[0],"r"))==NULL ) //打开性别编码表文件
{
printf("can't open file %s!!\n",sysCodeNamedTable[0]);
ErrorReport("Initialization",sysCodeNamedTable[0]);
exit(1);
}
else
{
pMySexList=(SexList*)malloc(sizeof(SexList));
if( pMySexList==NULL )
{
printf("Memory assign fail!\n!");
ErrorReport("Initialization","Memory assign fail!!");
exit(1);
}
else
{
//建立头结点
pMySexList->head =(SexNode*)malloc(sizeof(SexNode));
pMySexList->head->next=NULL;
}
//分配结点空间
Init_pSNode=(SexNode*)malloc(sizeof(SexNode));
if( Init_pSNode==NULL)
{
printf("Memory assign fail!!");
exit(1);
}
else
{
while( fread(Init_pSNode,sizeof(SexNode)-4,1,fp)==1 )
{
Init_pSNode->next=pMySexList->head->next;
pMySexList->head->next=Init_pSNode;
Init_pSNode=(SexNode*)malloc(sizeof(SexNode));
}
}
}
//构造教育状况编码表对象
if( (fp=fopen(sysCodeNamedTable[1],"r"))==NULL ) //打开教育状况编码表文件
{
printf("can't open file %s!!\n",sysCodeNamedTable[1]);
ErrorReport("Initialization",sysCodeNamedTable[1]);
exit(1);
}
else
{
pMyEStatusList=(EStatusList*)malloc(sizeof(EStatusList));
if( pMyEStatusList==NULL )
{
printf("Memory assign fail!\n!");
ErrorReport("Initialization","Memory assign fail!!");
exit(1);
}
else
{
//建立头结点
pMyEStatusList->head=(EStatusNode*)malloc(sizeof(EStatusNode));
pMyEStatusList->head->next=NULL;
}
//分配结点空间
Init_pENode=(EStatusNode*)malloc(sizeof(EStatusNode));
if( Init_pENode==NULL)
{
printf("Memory assign fail!!");
exit(1);
}
else
{
while( fread(Init_pENode,sizeof(EStatusNode)-4,1,fp)==1 )
{
Init_pENode->next=pMyEStatusList->head->next;
pMyEStatusList->head->next=Init_pENode;
Init_pENode=(EStatusNode*)malloc(sizeof(EStatusNode));
}
}
}
//构造最后毕业学校编码表对象
if( (fp=fopen(sysCodeNamedTable[2],"r"))==NULL ) //打开性别编码表文件
{
printf("can't open file %s!!\n",sysCodeNamedTable[2]);
ErrorReport("Initialization",sysCodeNamedTable[2]);
exit(1);
}
else
{
pMyLastSchoolList=(LastSchoolList*)malloc(sizeof(LastSchoolNode));
if( pMyLastSchoolList==NULL )
{
printf("Memory assign fail!\n!");
ErrorReport("Initialization","Memory assign fail!!");
exit(1);
}
else
{
//建立头结点
pMyLastSchoolList->head=(LastSchoolNode*)malloc(sizeof(LastSchoolNode));
pMyLastSchoolList->head->next=NULL;
}
Init_pLNode=(LastSchoolNode*)malloc(sizeof(LastSchoolNode));
if( Init_pLNode==NULL)
{
printf("Memory assign fail!!");
exit(1);
}
else
{
while( fread(Init_pLNode,sizeof(LastSchoolNode)-4,1,fp)==1 )
{
Init_pLNode->next=pMyLastSchoolList->head->next;
pMyLastSchoolList->head->next=Init_pLNode;
Init_pLNode=(LastSchoolNode*)malloc(sizeof(LastSchoolNode));
}
}
}
//返回用户对象链表
printf("系统初始化完毕!!\n");
DispUserInfo();
return pMyUserList;
}
}
}
int ErrorReport(char *Module,char *res)
{
FILE *fp;
if( (fp=fopen("ErrorReport.txt","a"))==NULL )
{
printf("can't open ErrorReport.txt!!!");
fclose(fp);
return 0;
}
else
{
char *str="操作失败,原因: ";
fputs(Module,fp);
fputs("模块",fp);
fputs(str,fp);
fputs(res,fp);
fputc('\n',fp);
fclose(fp);
return 1;
}
}
//用户登录
void UserLogin()
{
//iFlag为循环控制变量,iFunItem为操作识别变量
int iFlag=1,iFunItem;
char curUserName[20],curUserPwd[20];
while(iFlag==1)
{
printf("1)输入用户名称;\n");
printf("2)输入用户口令;\n");
printf("3)确定;\n");
printf("0)退出;\n");
printf("请选择操作:");
scanf("%d",&iFunItem);
switch(iFunItem)
{
case 1:
{
//接收用户名
printf("请输入用户名称:");
scanf("%s",curUserName);
}
break;
case 2:
{
//接收用户口令
printf("请输入用户口令:");
scanf("%s",curUserPwd);
}
break;
case 3:
{
//设置用户信息
strcpy(UserID, curUserName);
strcpy(UserPWD,curUserPwd);
iFlag=0;
}
break;
case 0:
{
strcpy(curUserName,"");
strcpy(curUserPwd,"");
iFlag=0;
}
break;
default:
{
printf("错误的操作选择!!!\n");
ErrorReport("UserLogin","选择错误!!");
}
break;
}
}
}
//系统退出
int ExitApp()
{
printf("系统正在退出...\n");
//注销用户
strcpy(UserID,"");
strcpy(UserPWD,"");
return 0;
}
//判断权限
char* JudgePermission()
{
UserNode *Judge_pLNode=pMyUserList->head->next;
if( UserID=="" || UserPWD=="" )
{
printf("用户名或密码不能为空!!\n");
ErrorReport("JudgePermission","用户名或密码为空!!");
}
else
{
while( Judge_pLNode!=NULL && ( strcmp(Judge_pLNode->UserID,UserID)!=0 || strcmp(Judge_pLNode->UserPWD,UserPWD)!=0 ) )
Judge_pLNode=Judge_pLNode->next;
}
//若Judge_pLNode==NULL 则不是合法用户
if( Judge_pLNode==NULL )
{
printf("您不是合法的用户!!\n");
return NULL;
}
else
return Judge_pLNode->Potency; //返回权限
}
//管理员控制模块
void AdmModule()
{
//iFlag为循环控制变量,iFunItem为操作识别变量
int iFunItem,iFlag=1;
while(iFlag==1)
{
printf("1)用户管理;\n");
printf("2)编码管理;\n");
printf("0)系统退出;\n");
printf("请选择操作:");
scanf("%d",&iFunItem);
switch(iFunItem)
{
case 1:
{
//调用用户管理模块
UserManagement();
}
break;
case 2:
{
//调用编码管理模块
CodeManagement();
}
break;
case 0:
{
iFlag=0;
}
break;
default:
{
printf("错误的操作选择!!!\n");
ErrorReport("AdmModule","选择错误!!");
}
break;
}
}
}
//用户管理模块
void UserManagement()
{
//iFlag为循环控制变量,iFunItem为操作识别变量
int iFunItem,iFlag=1;
while(iFlag==1)
{
printf("1)添加用户;\n");
printf("2)修改用户口令;\n");
printf("3)删除用户;\n");
printf("4)显示用户;\n");
printf("0)系统退出;\n");
printf("请选择操作:");
scanf("%d",&iFunItem);
switch(iFunItem)
{
case 1:
{
//调用添加用户模块
AppendUser();
}
break;
case 2:
{
//调用修改用户口令模块
ModifyPWD();
}
break;
case 3:
{
//调用删除用户信息模块
DelUserInfo();
}
break;
case 4:
{
//调用显示用户信息模块
DispUserInfo();
}
break;
case 0:
{
iFlag=0;
}
break;
default:
{
printf("错误的操作选择!!!\n");
ErrorReport("UserManagement","选择错误!!");
}
break;
}
}
}
//判断用户是否存在
int isUserExisted(char *sID)
{
UserNode *pNode;
if( pMyUserList->head->next!=NULL )
{
pNode=pMyUserList->head->next;
while( pNode!=NULL && strcmp(pNode->UserID,sID)!=0 )
pNode=pNode->next;
if( pNode==NULL)
return 1;
else
{
printf("该用户名已经被占用,请用新的用户名进行添加!!\n");
return 0;
}
}
else
return 1;
}
//添加用户模块
void AppendUser()
{
UserNode *Append_pLNode;
char Append_sID[20],Append_sPWD[20],Append_Potency[20];
Append_pLNode=(UserNode*)malloc(sizeof(UserNode));
printf("所添加的用户名(1-20个字符):");
scanf("%s",Append_sID);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -