📄 main.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 + -