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

📄 main.c

📁 C语言实现的资源管理系统
💻 C
字号:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>


//结构体声明
struct Goods
{
	int index;
	int state;   //0表示可借,1表示借出
	char *name;
};

struct Goods cpt[1000];  //电脑
struct Goods dsk[1000];  //桌子
struct Goods chr[1000];  //椅子 


////////////////////////////////////////////函数声明 
//登陆函数
void login(int flag);
//操作函数
void operate();
//查询函数
void query();
//归还函数
void restore();
void restoreGoods(char *goods);   //归还具体物品
void calcback(char *goods);
//借取函数
void borrow();
void borrowGoods(char *goods);   //借具体物品
void calcflow(char *goods);

//初始化数据
void initial();
/////////////////////////////////////////函数声明结束

////函数体定义

void login(int flag)
{
	char selInLogin = '0';
	char pswd[6],ch = '\0';
	int j = 0;
	if(flag == 1)
	{
		do
		{
			printf("ID---------|:manager\n");
			printf("Password---|:");
			do
			{
				ch = getch();
				if(ch != '\x0D' && ch != '\x08' && ch != '\x1B' && ch !='\x09' && ch != '\x20')
				{
				//'\x0D'是回车键,'\x08是退格键','\x1B'是ESC键,'\x20'是空格键,'\x09'是Tab键
				//当用户按下这些键时不做屏幕回显,按下这些键以外的键时,回显*.
					putchar('*');
					pswd[j] = ch;
					j++;
				}
				else if(ch == '\x08')
				{
					if(j >=1 )
					{
						putchar('\b');
						putchar(' ');
						putchar('\b');
						pswd[j] = '\0';
					}
					j--;
				}
			}
			while(ch != '\r');   //当用户按下回车键时终止输入密码
			putchar('\n');
			pswd[j] = '\0';
			if(0 == strcmp(pswd,"123456"))
			{
				flag = 0;
				break;
			}
			else
			{
				printf("Password error, try again.\n");
				j = 0;
				pswd[j] = '\0'; 
			}
		}
		while(1);
	}
	
	if(flag == 0)
	{
		system("cls");
		printf("0------------Operate\n");
		printf("1------------Query\n");
		printf("2------------Quit\n");
		printf("Please select operation by number key:\n");
		do
		{
			selInLogin =(char) getch();
			switch(selInLogin)
			{
			case '0': operate();break;
			case '1': query();break;
			case '2':exit(0);break;
			default:printf("Input error,try again:\n");break;
			}
		}
		while(selInLogin < '0' || selInLogin > '2');
	}		
		
}

void query()
{
	char selInQuery = '0';
	char *goods;
	int id,j,k;
	struct Goods *pG;
	system("cls");
	printf("0-----------Computer\n");
	printf("1-----------Desk\n");
	printf("2-----------Chair\n");
	printf("3-----------Go Back\n");
	printf("4-----------Quit\n");
	printf("Please select by number keys.\n");
	do
	{
		selInQuery = getch();
		switch(selInQuery)
		{
		case '0': pG = cpt; goods = "computer";break;
		case '1': pG = dsk; goods = "desk";break;
		case '2': pG = chr; goods = "chair";break;
		case '3': login(0);break;
		case '4': exit(0);break;
		default:printf("Input error, try again.\n");break;
		}
	}
	while(selInQuery < '0' || selInQuery > '4');
	for(j = 0 ; j < 1000; j++)
		if((pG+j)->state == 0)
			break;
	if(j == 0)
	{
		printf("All of the %ss in the storage.\n",goods);
	}
	else if(j == 999)
	{
		printf("All of the %ss have flowed out.\n",goods);
		printf("%s storage is null.\n",goods,1000-j);
	}
	else
	{
		printf("%s %d out.\n",goods,j);
		printf("%s %d in the storage.\n",goods,1000-j);
	}
	printf("Press any key to go back!\n");
	getch();
	query();

}

void operate()
{
	char selInOperate = '0';
	system("cls");    //清屏函数要包含头文件window.h和conio.h
	printf("0--------Restore\n");
	printf("1--------Borrow\n");
	printf("2--------Go Back\n");
	printf("3--------Quit\n");
	printf("please select by the number number key:\n");
	do
	{
		selInOperate = getch();
		switch(selInOperate)
		{
		case '0': restore();break;
		case '1': borrow();break;
		case '2':login(0);break;   //返回主菜单 
		case '3': exit(0);break;
		default:printf("Input error,try again.\n");break;
		}
	}
	while(selInOperate < '0' || selInOperate > '3');
}
void restore()
{
	char selInRetore = '0';
	system("cls");
	printf("0-----------Computer\n");
	printf("1-----------Desk\n");
	printf("2-----------Chair\n");
	printf("3-----------Go Back\n");
	printf("4-----------Quit\n");
	printf("Please select what you wanna restore by number key. \n");
	do
	{
		selInRetore = getch();
		switch(selInRetore)
		{
		case '0':restoreGoods("Computer");break;
		case '1':restoreGoods("Desk");break;
		case '2':restoreGoods("Chair");break;
		case '3':operate();break;
		case '4':exit(0);break;
		default:printf("Input error,try again.\n");break;
		}
	}
	while(selInRetore < '0' || selInRetore > '4');

	
}

void restoreGoods(char *goods)
{
	if(0 == strcmp(goods,"Computer"))
		calcback("computer");
	else if(0 == strcmp(goods,"Desk"))
		calcback("desk");
	else
		calcback("chair");
}

void calcback(char *goods)
{
	
	int k , j, count,flag = 0;
	char tmp[1000];
	struct Goods * pG;
	if(0 == strcmp(goods,"computer"))
		pG = cpt;
	else if(0 == strcmp(goods,"desk"))
		pG = dsk;
	else
		pG = chr;

	for(j = 999 ; j >= 0 ; j--)
	{
		if((pG+j)->state == 1)
			break;
	}
	if(j == -1)
	{
		printf("No %s has flowed out!\n",goods);
		printf("please insure your selection is correct!\n");
	}
	else
	{
		do
		{
			printf("Please input how many %s(s) that you restore.\n",goods);
			gets(tmp);
			for(k = 0; tmp[k] != '\0' ; k++)
			{
				if(tmp[k] < '0' || tmp[k] > '9')
				{
					printf("Please insure your input is an integer, try again!\n");
				}
				else if(atoi(tmp) > j)
				{
					printf("Range error.\nInsure your input is no greater than the acount has flowed out. try again.\n");
					break;
				}
				else 
				{
					flag = 1;
				}
			}
		}
		while(!flag);
		for(k = j; k > j - atoi(tmp) ; k--)
		{
			(pG+k)->state = 0;
		}
		
	}
	printf("j = %d\n",j);
	printf("%s %d left!\n",goods,999-j+atoi(tmp));
	printf("\n\nPlease enter any key to go back!\n");
	getch();
	restore();
}

void borrow()
{
	char selInBorrow = '0';
	system("cls");
	printf("0-----------Computer\n");
	printf("1-----------Desk\n");
	printf("2-----------Chair\n");
	printf("3-----------Go Back\n");
	printf("4-----------Quit\n");
	printf("Please select what you wanna borrow by number key. \n");
	
	do
	{
		selInBorrow = getch();
		switch(selInBorrow)
		{
		case '0':borrowGoods("Computer");break;
		case '1':borrowGoods("Desk");break;
		case '2':borrowGoods("Chair");break;
		case '3':operate();break;
		case '4':exit(0);break;
		default:printf("Input error,try again.\n");break;
		}
	}
	while(selInBorrow < '0' || selInBorrow > '4');
}

void borrowGoods(char *goods)
{
	if(0 == strcmp(goods,"Computer"))
		calcflow("computer");
	else if(0 == strcmp(goods,"Desk"))
		calcflow("desk");
	else
		calcflow("chair");
}

void calcflow(char *goods)
{
	int j,k,flag = 0;
	char tmp[1000];
	struct Goods * pG;
	if(0 == strcmp(goods,"computer"))
		pG = cpt;
	else if(0 == strcmp(goods,"desk"))
		pG = dsk;
	else
		pG = chr;

	for(j = 0 ; j < 1000 ; j ++)
	{
		if(0 == (pG+j)->state)
			break;
	}
	if(j == 1000)  //暗示了所有已经借出
	{
		printf("No storage can flow out!\n");
	}
	else
	{
		printf("%d %s(s) can flow out!\n",1000-j,goods);
		printf("Please input how many %s(s) that you wanna borrow:\n",goods);
		do
		{
			gets(tmp);
			for(k = 0 ; tmp[k] != '\0' ; k++)
			{
				if(tmp[k] < '0' || tmp[k] > '9')
				{
					printf("Be sure your input is an integer, try again.\n");
					break;
				}
				else if(atoi(tmp) > 1000-j)
				{
					printf("Sorry the storage is not enough, try again.\n");
					break;
				}
				else
					flag = 1;
			}
		}
		while(!flag);
		//atoi(tmp)是把tmp转换成整数包含头文件stdlib.h
		for(k = j ; k < atoi(tmp) + j; k++)
		{
			(pG+k)->state = 1;
		}
	
	}
	printf("%s %d left!\n",goods,1000-j-atoi(tmp));
	printf("\n\nPlease enter any key to go back!\n");
	getch();
	borrow();
}

void initial()
{
	int i;
	for(i = 0 ; i < 1000; i ++)
	{
		
		cpt[i].index = i+1; cpt[i].state = 0; cpt[i].name = "Computer";
		dsk[i].index = i+1; dsk[i].state = 0; dsk[i].name = "Desk";
		chr[i].index = i+1; chr[i].state = 0; chr[i].name = "Chair";
		
	}
}


/////////////////////////////函数定义结束
int main()    //带返回值的main这样做使程序结束后能够正确的把操作权限返回给操作系统
{
	system("cls");
	initial();   //每次运行都是初始化为此参数
	login(1);
	system("cls");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -