⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app1.cpp

📁 一个人口教育普查数据收集的软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#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 + -