学生信息管理系统 C语言

学生信息管理系统

整个代码C实现,利用链表实现学生信息和账户信息的增删改查。
#pragma once
#define  _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <conio.h>

#define USR_NAME_LEN	30
#define USR_PWD_LEN		30

#define COURSE_NUM		3

#define USR_ACCOUNT_LOC	50
#define USR_INFO_LOC	50

enum { ADMIN, GUEST };  //管理员 0, 客户 1

typedef int USR_ROLE;  //用户角色

//账号
typedef struct usr_account_tag
{
	char		usr_name[USR_NAME_LEN];	//用户姓名
	char		usr_pwd[USR_PWD_LEN];	//用户密码  
	USR_ROLE	usr_role;				//角色
	struct usr_account_tag *pNext_Usr_Account;
}USR_ACCOUNT, *pUSR_ACCOUNT;

//课程
typedef struct course 
{
	int course_id;
	double course_score;
}COURSE, *pCOURSE;

//学生信息
typedef struct usr_infor_tag
{
	int		usr_id;
	char	usr_name[USR_NAME_LEN];
	COURSE	course[COURSE_NUM];
	struct	usr_infor_tag *pNext_Usr_Infor;
}USR_INFOR, *pUSR_INFOR;


void system_init(const char* config_file_name, pUSR_ACCOUNT *pUsr_Acount, pUSR_INFOR *pUsr_Infor);

USR_ROLE role_confirm(pUSR_ACCOUNT pUsr_Account);

void show_system_menu(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List, pUSR_INFOR *ppUsr_Infor_List);
void show_search_menu(USR_ROLE role, pUSR_INFOR pUsr_Infor_List);

//查找学生信息
void search_usr_infor_all(pUSR_INFOR pUsr_Infor_List);
void search_usr_infor_by_name(pUSR_INFOR pUsr_Infor_List);
void search_usr_infor_by_id(pUSR_INFOR pUsr_Infor_List);

//增删改学生信息
void add_usr_infor(USR_ROLE role, pUSR_INFOR *ppUsr_Infor_List);
void upt_usr_infor(USR_ROLE role, pUSR_INFOR *ppUsr_Infor_List);
void del_usr_infor(USR_ROLE role, pUSR_INFOR *ppUsr_Infor_List);

//更新学生信息到文件
void save_usr_infor_file(pUSR_INFOR *ppUsr_Infor_List);

//增删改用户信息
void add_usr_account(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List);
void upt_usr_account(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List);
void del_usr_account(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List);

//更新账户信息到文件
void save_usr_account_file(pUSR_ACCOUNT *ppUsr_Acount_List);

//查找用户信息
void search_usr_account(USR_ROLE role, pUSR_ACCOUNT pUsr_Acount_List);
void system_exit();

SIMS.c

#include "SIMS.h"

extern char usr_account_loc[USR_ACCOUNT_LOC];  //账户文件地址
extern char usr_info_loc[USR_INFO_LOC] ;	//学生信息文件地址

//系统初始化函数。初始化内存中的学生信息链表和账号列表
void system_init(const char* config_file_name, pUSR_ACCOUNT *ppUsr_Acount, pUSR_INFOR *ppUsr_Infor)
{
	FILE *fp;
	fp = fopen(config_file_name, "r");
	if (NULL == fp)
	{
		perror("fopen");
		return;
	}
	//usr_account_loc[USR_ACCOUNT_LOC] = { 0 };  //账户文件地址
	//usr_info_loc[USR_INFO_LOC] = { 0 };	//学生信息文件地址
	fscanf(fp, "%s", usr_account_loc);
	fscanf(fp, "%s", usr_info_loc);
	fclose(fp); //关闭配置文件


	FILE *fp_usr_account;
	FILE *fp_usr_info;

	fp_usr_account = fopen(usr_account_loc, "r");
	if (NULL == fp_usr_account)
	{
		perror("fopen:user_account.txt");
		return;
	}

	//读取usr_account文件信息
	//加载文件信息到链表,插到链表尾部
	USR_ACCOUNT usr_account;
	while (memset(&usr_account, 0, sizeof(USR_ACCOUNT)), fscanf(fp, "%s %s%d", usr_account.usr_name, usr_account.usr_pwd, &usr_account.usr_role) != EOF)
	{

		pUSR_ACCOUNT pNew = (pUSR_ACCOUNT)calloc(1, sizeof(USR_ACCOUNT));
		strcpy(pNew->usr_name, usr_account.usr_name);
		strcpy(pNew->usr_pwd, usr_account.usr_pwd);
		pNew->usr_role = usr_account.usr_role;
		pNew->pNext_Usr_Account = NULL;
		
		if (NULL == *ppUsr_Acount)
		{
			*ppUsr_Acount = pNew;
		}
		else
		{
			pUSR_ACCOUNT pCur = *ppUsr_Acount, pPre = *ppUsr_Acount;
			while (pCur)
			{
				pPre = pCur;
				pCur = pCur->pNext_Usr_Account;
			}
			pPre->pNext_Usr_Account = pNew;
		}

	}
	fclose(fp_usr_account);  //关闭usr_account文件


	fp_usr_info = fopen(usr_info_loc, "r");
	if (NULL == fp_usr_info)
	{
		perror("fopen");
		return;
	}

	//读取usr_infor文件信息
	//加载文件信息到链表,按照序号利用有序插法插入链表
	USR_INFOR usr_infor;
	while (memset(&usr_infor, 0, sizeof(USR_INFOR)),
		  fscanf(fp_usr_info, "%d%s",&usr_infor.usr_id, usr_infor.usr_name)!= EOF)
	{
		pUSR_INFOR pNew = (pUSR_INFOR)calloc(1, sizeof(USR_INFOR));	
		pNew->usr_id = usr_infor.usr_id;
		strcpy(pNew->usr_name, usr_infor.usr_name);
		pNew->pNext_Usr_Infor = NULL;
		for (int i = 0; i < COURSE_NUM; i++)
		{
			fscanf(fp_usr_info, "%d%lf", &pNew->course[i].course_id, &pNew->course[i].course_score);
		}
		
		pUSR_INFOR pCur = *ppUsr_Infor;
		pUSR_INFOR pPre = *ppUsr_Infor;

		if (NULL == *ppUsr_Infor)
		{
			*ppUsr_Infor = pNew;
		}
		else if (usr_infor.usr_id < pCur->usr_id)
		{
			pNew->pNext_Usr_Infor = pCur;
			*ppUsr_Infor = pNew;
		}
		else
		{
			while (pCur)
			{
				if (usr_infor.usr_id < pCur->usr_id)
				{
					pPre->pNext_Usr_Infor = pNew;
					pNew->pNext_Usr_Infor = pCur;
					break;
				}
				pPre = pCur;
				pCur = pCur->pNext_Usr_Infor;
			}
			if (NULL == pCur)  //插入尾部
			{
				pPre->pNext_Usr_Infor = pNew;
			}
		}

	}
	fclose(fp_usr_info);
}

//验证账号信息,根据输入的用户名和密码检查
USR_ROLE role_confirm(pUSR_ACCOUNT pUsr_Account)
{
	system("cls");
	char usr_name[USR_NAME_LEN];
	char usr_pwd[USR_PWD_LEN];
	printf("Enter usr_name: ");
	scanf("%s", usr_name);
	char c;
	int idx = 0;
	printf("Enter usr_password:");
	while (1)
	{
		c = getch();
		if (c == '\r')
		{
			break;
		}
		else if (c == '\b' && idx >= 0)
		{
			if (idx == 0)
			{
				continue;
			}
			else
			{
				printf("\b \b");
				idx--;
			}
		}
		else
		{
			printf("*");
			usr_pwd[idx++] = c;
		}
	}
	usr_pwd[idx] = '\0';

	//查询账户信息,验证账户是否存在
	if (NULL == pUsr_Account)
	{
		printf("No Account!!!!\n");
		return -1;
	}
	else
	{
		while (pUsr_Account) //遍历查找账户名
		{
			if (strcmp(usr_name, pUsr_Account->usr_name) == 0)
			{
				if (strcmp(usr_pwd, pUsr_Account->usr_pwd) == 0)
				{
					printf("\n\n****Login Success!!!****\n\n");
					system("pause");
					getchar();
					return pUsr_Account->usr_role;
				}
				else
				{
					printf("\n\n****Password error, login failed!!!****\n\n");
					printf("Enter the account and password again? y or n. Please input: ");
					rewind(stdin);
					char ch;
					scanf("%c", &ch);
					if ('n' == ch)
					{
						return -2;
					}
					else
					{
						return -1;
					}
				}
			}
			pUsr_Account = pUsr_Account->pNext_Usr_Account;
		}
		printf("\n\n****No account, login failed!!!****\n\n");
		printf("Enter the account and password again? y or n. Please input: ");
		rewind(stdin);
		char ch;
		scanf("%c", &ch);
		if ('n' == ch)
		{
			return -2;
		}
		else
		{
			return -1;
		}
		return -1;
	}
}

void show_system_menu(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List, pUSR_INFOR *ppUsr_Infor_List)
{
	char sel;
	int k = 1;
	while (k)
	{
		system("cls");
		if (ADMIN == role)  //管理员界面
		{
			printf("*******************************************************************************************************\n");
			printf("**************************  Student    Information    Managenment    System  **************************\n");
			printf("*******************************************************************************************************\n");
			printf("*                                                                                                     *\n");
			printf("*                                   1. Search student Information                                     *\n");
			printf("*                                   2. Add student Information                                        *\n");
			printf("*                                   3. Update student Information                                     *\n");
			printf("*                                   4. Delete student Information                                     *\n");
			printf("*                                   5. Add user Account                                               *\n");
			printf("*                                   6. Update user Account                                            *\n");
			printf("*                                   7. Delete user Account                                            *\n");
			printf("*                                   8. Search user Account                                            *\n");
			printf("*                                   9. Exit                                                           *\n");
			printf("*                                                                                                     *\n");
			printf("*******************************************************************************************************\n");
			printf("*******************************************************************************************************\n");
		}
		else if (GUEST == role)
		{
			printf("*******************************************************************************************************\n");
			printf("**************************  Student    Information    Managenment    System  **************************\n");
			printf("*******************************************************************************************************\n");
			printf("*                                                                                                     *\n");
			printf("*                                   1. Search student Information                                     *\n");
			printf("*                                   9. Exit                                                           *\n");
			printf("*                                                                                                     *\n");
			printf("*******************************************************************************************************\n");
			printf("*******************************************************************************************************\n");
		}
		printf("\n\n");

		printf("==> Your Select:");
		rewind(stdin);
		scanf("%c", &sel);

		switch (sel)
		{
		case '1': show_search_menu(role, *ppUsr_Infor_List); break;
		case '2': 
			if (ADMIN == role)
			{
				add_usr_infor(role, ppUsr_Infor_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			} 
			break;
		case '3': 
			if (ADMIN == role)
			{
				upt_usr_infor(role, ppUsr_Infor_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break; 
		case '4': 
			if (ADMIN == role)
			{
				del_usr_infor(role, ppUsr_Infor_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break;
		case '5': 
			if (ADMIN == role)
			{
				add_usr_account(role, ppUsr_Acount_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break; 
		case '6': 
			if (ADMIN == role)
			{
				upt_usr_account(role, ppUsr_Acount_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break;
		case '7': 
			if (ADMIN == role)
			{
				del_usr_account(role, ppUsr_Acount_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break;
		case '8': 
			if (ADMIN == role)
			{
				search_usr_account(role, *ppUsr_Acount_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break; 
		case '9': k = 0; system_exit(); break;
		default:
			rewind(stdin);
			printf("Input ERROR!!! Please input again.\n");
			system("pause");
			break;
		}
	}
}

void show_search_menu(USR_ROLE role, pUSR_INFOR pUsr_Infor_List)
{
	char sel;
	while (1)
	{
		system("cls");
		if (ADMIN == role)  //管理员界面
		{
			printf(" 0. Search All\n");
		}
		printf(" 1. Search By Name\n");
		printf(" 2. Search By ID\n");
		printf(" 3. Return\n");
		printf("\n\n");

		printf("==> Your Select:");
		rewind(stdin);
		scanf("%c", &sel);
		switch (sel)
		{
		case '0': 
			if (ADMIN == role)
			{
				search_usr_infor_all(pUsr_Infor_List);
			}
			else if (GUEST == role)
			{
				rewind(stdin);
				printf("Input ERROR!!! Please input again.\n");
				system("pause");
			}
			break;
		case '1': search_usr_infor_by_name(pUsr_Infor_List); break;
		case '2': search_usr_infor_by_id(pUsr_Infor_List); break;
		case '3': return;  break;
		default:
			rewind(stdin);
			printf("Input ERROR!!! Please input again.\n");
			system("pause");
			break;
		}
	}
}

//查找学生信息
void search_usr_infor_all(pUSR_INFOR pUsr_Infor_List)
{
	pUSR_INFOR pFind = pUsr_Infor_List;
	system("cls");
	printf("All information is: \n\n");
	while (pFind)
	{
		printf("%03d  %-8s", pFind->usr_id, pFind->usr_name);
		for (int i = 0; i < COURSE_NUM; i++)
		{
			printf("%4d %-8.2f", pFind->course[i].course_id, pFind->course[i].course_score);
		}
		printf("\n");
		pFind = pFind->pNext_Usr_Infor;
	}
	printf("\n");
	system("pause");
	rewind(stdin);
}
void search_usr_infor_by_name(pUSR_INFOR pUsr_Infor_List)
{
	pUSR_INFOR pFind = pUsr_Infor_List;
	char search_name[USR_NAME_LEN] = "";

	int flag = 0;
	system("cls");
	printf("Please input the name of student: ");
	scanf("%s", search_name);
	while (pFind)
	{
		if (strcmp(search_name, pFind->usr_name) == 0)
		{
			printf("%03d  %-8s", pFind->usr_id, pFind->usr_name);
			for (int i = 0; i < COURSE_NUM; i++)
			{
				printf("%4d %-8.2f", pFind->course[i].course_id, pFind->course[i].course_score);
			}
			printf("\n");
			flag = 1;
			break;
		}
		pFind = pFind->pNext_Usr_Infor;
	}
	if (0 == flag)
	{
		printf("Not found this student!!!\n");
	}
	system("pause");
	rewind(stdin);
}
void search_usr_infor_by_id(pUSR_INFOR pUsr_Infor_List)
{
	pUSR_INFOR pFind = pUsr_Infor_List;
	int search_id;

	int flag = 0;
	system("cls");
	printf("Please input the Num of student: ");
	scanf("%d", &search_id);
	while (pFind)
	{
		if (search_id==pFind->usr_id)
		{
			printf("%03d  %-8s", pFind->usr_id, pFind->usr_name);
			for (int i = 0; i < COURSE_NUM; i++)
			{
				printf("%4d %-8.2f", pFind->course[i].course_id, pFind->course[i].course_score);
			}
			printf("\n");
			flag = 1;
			break;
		}
		pFind = pFind->pNext_Usr_Infor;
	}
	if (0 == flag)
	{
		printf("Not found this student!!!\n");
	}
	system("pause");
	rewind(stdin);
}

//增删改学生信息
void add_usr_infor(USR_ROLE role, pUSR_INFOR *ppUsr_Infor_List)
{
	pUSR_INFOR pNew = (pUSR_INFOR)calloc(1, sizeof(USR_INFOR));
	pUSR_INFOR pCur = NULL;
	pUSR_INFOR pPre = NULL;
	int flag;
	while (1)
	{
		pCur = pPre = *ppUsr_Infor_List;
		flag = 1;
		system("cls");
		printf("Please input a student's information. \n");
		printf("Such as: {id name} and %d course{course_id course_score}. \n",COURSE_NUM);
		rewind(stdin);
		scanf("%d%s", &pNew->usr_id, pNew->usr_name);
		for (int i = 0; i < COURSE_NUM; i++)
		{
			scanf("%d%lf", &pNew->course[i].course_id, &pNew->course[i].course_score);
		}

		if (NULL == *ppUsr_Infor_List)
		{
			*ppUsr_Infor_List = pNew;
		}
		else if (pNew->usr_id < pCur->usr_id)
		{
			pNew->pNext_Usr_Infor = pCur;
			*ppUsr_Infor_List = pNew;
		}
		else
		{
			while (pCur)
			{
				if (pNew->usr_id < pCur->usr_id)
				{
					pPre->pNext_Usr_Infor = pNew;
					pNew->pNext_Usr_Infor = pCur;
					break;
				}
				else if (pNew->usr_id == pCur->usr_id)  //存在学生
				{
					flag = 0;
					break;
				}
				pPre = pCur;
				pCur = pCur->pNext_Usr_Infor;
			}
			if (NULL == pCur)  //插入尾部
			{
				pPre->pNext_Usr_Infor = pNew;
			}
		}
		if (flag)
		{
			printf("\nAdd success!!!\n");
			save_usr_infor_file(ppUsr_Infor_List);
			//system("pause");
		}
		else
		{
			printf("List have existed!!!\n");
		}
		printf("\n Input y to continus add, or any key else to return:");
		rewind(stdin);
		char c;
		scanf("%c", &c);
		if ('y' != c)
		{
			break;
		}
	}
}
void upt_usr_infor(USR_ROLE role, pUSR_INFOR *ppUsr_Infor_List)
{
	pUSR_INFOR pFind = *ppUsr_Infor_List;
	int flag = 0;
	int upt_id;
	system("cls");
	rewind(stdin);
	printf("Please input update student's ID: ");	
	scanf("%d", &upt_id);

	while (pFind)
	{
		if (pFind->usr_id == upt_id)
		{
			printf("Please update the student's information:\n");
			printf("Such as: {id name} and %d course{course_id course_score}. \n", COURSE_NUM);
			scanf("%d%s", &pFind->usr_id, pFind->usr_name);
			for (int i = 0; i < COURSE_NUM; i++)
			{
				scanf("%d%lf", &pFind->course[i].course_id, &pFind->course[i].course_score);
			}
			flag = 1;
			break;
		}
		pFind = pFind->pNext_Usr_Infor;
	}
	if (0 == flag)
	{
		printf("Not found this student!!!\n");
	}
	else
	{
		printf("\nUpdate success!!!\n");
		save_usr_infor_file(ppUsr_Infor_List);
	}
	system("pause");
}
void del_usr_infor(USR_ROLE role, pUSR_INFOR *ppUsr_Infor_List)
{
	pUSR_INFOR pFind = *ppUsr_Infor_List;
	pUSR_INFOR pPre = pFind;
	int flag = 0;
	int del_id;
	system("cls");
	rewind(stdin);
	printf("Please input delete student's ID: ");
	scanf("%d", &del_id);

	while (pFind)
	{
		if (pFind->usr_id == del_id)
		{
			pPre->pNext_Usr_Infor = pFind->pNext_Usr_Infor;
			free(pFind);
			pFind = NULL;
			flag = 1;
			break;
		}
		pPre = pFind;
		pFind = pFind->pNext_Usr_Infor;
	}
	if (0 == flag)
	{
		printf("Not found this student!!!\n");
	}
	else
	{
		printf("\nDelete success!!!\n");
		save_usr_infor_file(ppUsr_Infor_List);
	}
	system("pause");
}

//更新学生信息到文件
void save_usr_infor_file(pUSR_INFOR *ppUsr_Infor_List)
{
	FILE *fp;
	fp = fopen(usr_info_loc, "w");
	if (NULL == fp)
	{
		perror("fopen:usr_infor.txt, update failed!!!");
		system("pause");
		return;
	}
	pUSR_INFOR pCur = *ppUsr_Infor_List;

	while (pCur)
	{
		fprintf(fp, "%03d  %-10s", pCur->usr_id, pCur->usr_name);
		for (int i = 0; i < COURSE_NUM; i++)
		{
			fprintf(fp, "%4d  %-7.2f", pCur->course[i].course_id, pCur->course[i].course_score);
		}
		fprintf(fp, "\n");
		pCur = pCur->pNext_Usr_Infor;
	}
	fclose(fp);
}

//增删改用户信息
void add_usr_account(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List)
{
	pUSR_ACCOUNT pNew = (pUSR_ACCOUNT)calloc(1, sizeof(USR_ACCOUNT));
	pUSR_ACCOUNT pCur = NULL, pPre = NULL;
	
	while (1)
	{
		pPre=pCur = *ppUsr_Acount_List;

		int flag = 0;
		system("cls");
		printf("Please input a account's information. \n");
		printf("Such as:usr_name usr_pwd usr_role.\n");

		rewind(stdin);
		scanf("%s%s%d", pNew->usr_name, pNew->usr_pwd, &pNew->usr_role);
		if (NULL == *ppUsr_Acount_List)
		{
			*ppUsr_Acount_List = pNew;
			flag = 1;
		}
		else
		{
			while (pCur)
			{
				if (strcmp(pCur->usr_name, pNew->usr_name) == 0)
				{
					printf("List have existed!!!\n");
					break;
				}
				pPre = pCur;
				pCur = pCur->pNext_Usr_Account;
			}
			if (pCur == NULL)  //遍历,插到尾部
			{
				pPre->pNext_Usr_Account = pNew;
				flag = 1;
			}
		}
		
		if (flag)
		{
			printf("\nAdd success!!!\n");
			save_usr_account_file(ppUsr_Acount_List);
		}
		printf("\n Input y to continus add, or any key else to return:");
		rewind(stdin);
		char c;
		scanf("%c", &c);
		if ('y' != c)
		{
			break;
		}
	}
}
void upt_usr_account(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List)
{
	pUSR_ACCOUNT pFind = *ppUsr_Acount_List;
	int flag = 0;
	char upt_name[USR_NAME_LEN] = "";
	system("cls");
	rewind(stdin);
	printf("Please input update account's name: ");
	scanf("%s", upt_name);

	while (pFind)
	{
		if (strcmp(pFind->usr_name,upt_name)==0)
		{
			printf("Please update the account's information:\n");
			printf("Such as:usr_name usr_pwd usr_role.\n");

			rewind(stdin);
			scanf("%s%s%d", pFind->usr_name, pFind->usr_pwd, &pFind->usr_role);
			flag = 1;
			break;
		}
		pFind = pFind->pNext_Usr_Account;;
	}
	if (0 == flag)
	{
		printf("Not found this account!!!\n");
	}
	else
	{
		printf("\nUpdate success!!!\n");
		save_usr_account_file(ppUsr_Acount_List);
	}
	system("pause");
}
void del_usr_account(USR_ROLE role, pUSR_ACCOUNT *ppUsr_Acount_List)
{
	pUSR_ACCOUNT pFind = *ppUsr_Acount_List;
	pUSR_ACCOUNT pPre = pFind;
	int flag = 0;
	char del_name[USR_NAME_LEN]="";
	system("cls");
	rewind(stdin);
	printf("Please input delete account's name: ");
	scanf("%s", del_name);

	while (pFind)
	{
		if (strcmp(pFind->usr_name, del_name) == 0)
		{
			pPre->pNext_Usr_Account = pFind->pNext_Usr_Account;
			free(pFind);
			pFind = NULL;
			flag = 1;
			break;
		}
		pPre = pFind;
		pFind = pFind->pNext_Usr_Account;
	}
	if (0 == flag)
	{
		printf("Not found this account!!!\n");
	}
	else
	{
		printf("\nDelete success!!!\n");
		save_usr_account_file(ppUsr_Acount_List);
	}
	system("pause");
}

//更新账户信息到文件
void save_usr_account_file(pUSR_ACCOUNT *ppUsr_Acount_List)
{
	FILE *fp;
	fp = fopen(usr_account_loc, "w");
	if (NULL == fp)
	{
		perror("fopen:usr_account.txt, update failed!!!");
		system("pause");
		return;
	}
	pUSR_ACCOUNT pCur = *ppUsr_Acount_List;

	while (pCur)
	{
		fprintf(fp, "%-15s %-10s %d\n", pCur->usr_name, pCur->usr_pwd,pCur->usr_role);	
		pCur = pCur->pNext_Usr_Account;
	}
	fclose(fp);
}

//查找用户信息
void search_usr_account(USR_ROLE role, pUSR_ACCOUNT pUsr_Acount_List)
{
	pUSR_ACCOUNT pFind = pUsr_Acount_List;
	char search_name[USR_NAME_LEN] = "";

	int flag = 0;
	system("cls");
	printf("Please input the name of account: ");
	scanf("%s", search_name);
	while (pFind)
	{
		if (strcmp(search_name, pFind->usr_name) == 0)
		{
			printf("\nName:%-10s Pwd:%-10s Role:%s\n\n", pFind->usr_name, pFind->usr_pwd, pFind->usr_role ? "GUEST" : "ADMIN");
			flag = 1;
			break;
		}
		pFind = pFind->pNext_Usr_Account;
	}
	if (0 == flag)
	{
		printf("Not found this account!!!\n");
	}
	system("pause");
	rewind(stdin);
}

//系统退出
void system_exit()
{
	system("cls");
	printf("****LOG OUT!!!***\n");
	system("pause");
}

main.c

#include "SIMS.h"

char usr_account_loc[USR_ACCOUNT_LOC] = { 0 };  //账户文件地址
char usr_info_loc[USR_INFO_LOC] = { 0 };	//学生信息文件地址

int main(int argc, char *argv[])
{
	if (argc != 2)
	{
		printf("error args\n");
		return -1;
	}
	pUSR_ACCOUNT usr_account_list = NULL;
	pUSR_INFOR usr_infor_list = NULL;

	system_init(argv[1], &usr_account_list, &usr_infor_list);

	int role;
Login:
	role = role_confirm(usr_account_list);
	if (-1 == role)  //登录失败,退出程序
	{
		goto Login;
	}
	if (-2 == role)
	{
		printf("*****Log out!!!*****\n\n");
		return -1;
	}

	show_system_menu(role, &usr_account_list, &usr_infor_list);

	return 0;
}

三个txt文件:configure.txt, usr_account.txt, usr_infor.txt

  • configure.txt
usr_account.txt
usr_infor.txt
  • usr_account.txt
admin           admin      0
Tom             123        1
Robin           111        1
Alex            456        1
Jack            456        1
Mark            456        1
Sam             456        1
Alex            456        1
  • usr_infor.txt
001  Sam       1001  72.50  1002  90.50  1003  90.50  
002  Alex      1001  83.50  1002  99.50  1003  71.00  
003  Robin     1001  89.50  1002  70.50  1003  80.00  
004  Jack      1001  70.50  1002  56.50  1003  70.00  
005  Mark      1001  60.50  1002  79.50  1003  81.50  
006  Tom       1001  80.50  1002  89.50  1003  70.00  
007  Alex      1001  67.50  1002  89.50  1003  70.50  
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值