?? shebeiguanli.c
字號:
#include <string.h> //頭文件
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int m;
void zhuce_new();void denglu(); void jiemian();//函數(shù)聲明
void xiugai(); void insert(); void delet();
void print_infor(); void print_all();
void search(); void tongji();
//全局結(jié)構(gòu)體數(shù)組
struct eq_infor //設備信息
{
long num; //編號
char name[20]; //名稱
char sort[20]; //類別
char date[20]; //購買日期
char repairmen[20]; //維護人
char lab[20]; //實驗室
char discount[20]; //折舊率
char factory[20]; //生產(chǎn)商
char tel[20]; //故障維護電話
char posun[20]; //直接寫破損耙費
char yisun[20]; //直接寫遺損處理
}infor[100],del[1]; //infor[100]存放用戶輸入的數(shù)據(jù)
//del存放修改的數(shù)據(jù)
struct zhuce //用戶名和密碼
{
char name[20];
char password[20];
}zhuce[100],check,ce,cha; //注冊用戶用和登陸時驗證用
main() //主函數(shù)
{
int i;
printf("\n\n****@@@@****@@@@ 歡迎登陸實驗設備管理系統(tǒng) @@@@****@@@@****\n\n");
printf("\n 1 新用戶注冊 2 登陸管理系統(tǒng)\n\n");
printf("\n 0 退出系統(tǒng) \n\n");
printf("\n\n****@@@@****@@@@ 歡迎登陸實驗設備管理系統(tǒng) @@@@****@@@@****\n");
printf("\n----請您輸入需要服務的序號:\n");
scanf("%d",&i);
if(i<0||i>2)
{
printf("\n----您的輸入不正確,請重新輸入!\n");
printf("\n----請您輸入需要服務的序號:\n");
scanf("%d",&i);
}
switch(i)
{
case 1: zhuce_new(); break;//注冊
case 2: system("cls"); denglu(); break;//登陸
case 0: exit(0);
}
}
void zhuce_new() //注冊新用戶
{
char password[20]; //接收用戶密碼
int i=0,j=0,n;
FILE *fp;
printf("請輸入你的用戶名(長度必須在20個字符以內(nèi)):\n");
scanf("%s",check.name);
fp=fopen("stu_list.txt","ab+"); //打開存放注冊的數(shù)據(jù)的文本
for(i=0;;i++)
{
fread(&zhuce[i],sizeof(struct zhuce),1,fp); //讀文件
if(strcmp(check.name,zhuce[i].name)==0)//檢查用戶名是否已存在
{
do
{
printf("\n該用戶名已存存在,請重新輸入:\n");
scanf("%s",check.name);
}while(strcmp(check.name,zhuce[i].name)==0);
}
if(feof(fp)) break; //文件關閉,跳出循環(huán)
}
fclose(fp);
while((strlen(check.name)>20)) //用戶名不要過長
{
printf("\n你所輸入的用戶名過長,重新輸入:\n");
scanf("%s",check.name);
n=1;
}
while((strlen(check.name)==0)) //用戶名不能為空
{
printf("\n用戶名不能為空,請重新輸入:\n");
scanf("%s",check.name);
n=1;
}
if(n!=1)
{
printf("請輸入你的密碼(長度在20個字符以內(nèi)):\n");
scanf("%s",check.password);
printf("請在次輸入你的密碼:\n");
scanf("%s",password);
}
while(strcmp(check.password,password)!=0) //檢查兩次輸入的密碼是否相同
{
printf("\n你所輸入的密碼不一致,請重新輸入你的密碼:\n");
scanf("%s",check.password);
printf("\n請確認你的密碼:\n");
scanf("%s",password);
}
if(strcmp(check.password,password)==0) //兩次密碼相同,注冊成功
{
printf("\n注冊成功!\n");
fp=fopen("stu_list.txt","ab"); //打開文件
fwrite(&check,sizeof(struct zhuce),1,fp); //寫進文件
fclose(fp); //關閉文件
printf("\n請選擇你所需要的服務:1.進入管理系統(tǒng) 0.退出系統(tǒng)\n");
scanf("%d",&j);
getchar();
switch(j)
{
case 1 :jiemian();break; //界面函數(shù)
case 0 :exit(0);break; //退出系統(tǒng)
}
}
}
void denglu() //登陸函數(shù)
{
int i=0,j;
FILE*fp; //定義指針
do
{
printf("\n請輸入用戶名:\n");
scanf("%s",cha.name);
printf("\n請輸入密碼:\n");
scanf("%s",cha.password);
fp=fopen("stu_list.txt","rb"); //打開存放注冊的數(shù)據(jù)文本
rewind(fp);
do
{
fread(&zhuce[i],sizeof(struct zhuce),1,fp);
if(strcmp(zhuce[i].name,cha.name)==0&&strcmp(zhuce[i].password,cha.password)==0)
{ //檢查用戶名和密碼是否正確
i=0;system("cls");jiemian();break;//成功登陸就進入界面管理系統(tǒng)
}
else i=1;
}while(!feof(fp));
if(i==1)
{
printf("\n你輸入的用戶名或密碼有誤\n\n");
printf("\n1:重新登陸 2:注冊新用戶\n");//登陸不成功,提供重新登陸
do //和注冊新用戶
{
scanf("%d",&j);
getchar();
if(j==1) i=1;
else if(j==2)
{
system("cls"); //空屏幕
zhuce_new(); //注冊新用戶
}
else printf("\n你選擇有誤 請重新輸入:\n");
}while(j>2);
}
}while(i==1);
fclose(fp); //關閉文件
}
void jiemian() //界面函數(shù)
{
int i;
printf("\n\n****@@@@****@@@@ 歡迎登陸實驗設備管理系統(tǒng) @@@@****@@@@****\n\n\n\n");
printf("\n 1 修改密碼 2 設備信息的錄入 \n");
printf("\n 3 設備信息的修改 4 設備信息的分類統(tǒng)計\n");
printf("\n 5 設備信息的查詢 6 顯示所有的設備信息 \n" );
printf("\n 0 退出系統(tǒng) \n");
printf("\n\n\n\n****@@@@****@@@@ 歡迎登陸實驗設備管理系統(tǒng) @@@@****@@@@****\n");
printf("\n----請選擇需要服務的序號:\n\n");
scanf("%d",&i);
system("cls");
if(i<0||i>6)
{
printf("\n您輸入的數(shù)字不正確,請重新選擇并輸入:\n");
scanf("%d",&i);
}
switch(i)
{
case 1: xiugai();break; //修改密碼
case 2: insert(); break; //錄入信息
case 3: delet(); break; //修改信息
case 4: tongji(); break; //分類統(tǒng)計
case 5: search();break; //查詢信息
case 6: print_all();break; //打印全部信息
case 0: exit(0); //退出系統(tǒng)
}
}
void xiugai() //修改用戶密碼
{
FILE * fp;
char password1[20],password2[20]; //接收修改密碼
int i=0, m=1,k=0,j;
fp=fopen("stu_list.txt","rb"); //打開存放注冊數(shù)據(jù)的文件
if((fp=fopen("stu_list.txt","rb"))==NULL) //文件為空
{
printf("不能打開該文件,按任意鍵返回\n");
getch();
jiemian(); //返回界面管理系統(tǒng)
}
for(i=0;!feof(fp);i++) //循環(huán)至文件關閉
{
fread(&zhuce[i],sizeof(struct zhuce),1,fp);//讀注冊的數(shù)據(jù)
}
j=i;
printf("請輸入你的用戶名:\n");
scanf("%s",cha.name);
printf("請輸入你的密碼:\n");
scanf("%s",cha.password);
do
{
for(i=0;feof(fp);i++)
{
if(strcmp(cha.name,zhuce[i].name)==0&&strcmp(cha.password,zhuce[i].password)==0)
{ //檢查用戶名和密碼是否正確
k=i;m=0;break;
}
}
if(m!=0) //用戶名或密碼有誤,重新輸入
{
printf("你輸入的帳號或密碼錯誤!\n");
printf("請重新輸你的帳號:\n");
scanf("%s",cha.name);
printf("請重新輸入你的密碼:\n");
scanf("%s",cha.password);
}
}while(m!=0); //至用戶名和密碼正確,中止循環(huán)
if(m==0)
{
printf("\n請您輸入一個新密碼(小于20位內(nèi)的字符):\n");
scanf("%s",password1); //輸入新密碼
printf("\n請再次輸入新密碼:\n");
scanf("%s",password2); //再次輸入新密碼
while(strlen(password1)>20||strcmp(password1,password2)!=0)
{ //限制密碼的長度和驗證兩次輸入的密碼是否一致
printf("輸入有誤,請重新輸入:\n");
scanf("%s",password1); //輸入有誤,重新輸入
printf("\n請再次輸入新密碼:\n");
scanf("%s",password2);
}
strcpy(zhuce[k].password,password1); //覆蓋原來的密碼
}
fp=fopen("stu_list.txt","wb"); //把新密碼讀進文本
for(i=0;i<j;i++)
fwrite(&zhuce[i],sizeof(struct zhuce),1,fp);
fclose(fp);
printf("修改成功,請按任意鍵返回\n");//修改成功
getch();
system("cls");
jiemian(); //修改成功后回到界面管理系統(tǒng)
}
void insert() //輸入設備的信息
{
FILE *fp; //定義指針
int i=0;
char k='y';
fp=fopen("eq_infor.txt","ab");
if((fp=fopen("eq_infor.txt","ab"))==NULL)
exit(0);
while(k=='y'||k=='Y') //輸入信息的循環(huán)條件
{
system("cls");
printf("----請為設備輸入信息:\n"); //接收設備信息
printf("---number:\n");
scanf("%ld",&infor[i].num);
printf("---name:\n");
scanf("%s",&infor[i].name);
printf("---sort:\n"); //類型一定要用大寫字母A,B,C,D,E,F
scanf("%s",&infor[i].sort);
printf("---date:\n");
scanf("%s",&infor[i].date);
printf("---repairmen:\n");
scanf("%s",&infor[i].repairmen);
printf("---lab:\n");
scanf("%s",&infor[i].lab);
printf("---discount:\n");
scanf("%s",&infor[i].discount);
printf("---factory:\n");
scanf("%s",&infor[i].factory);
printf("---telephone:\n");
scanf("%s",&infor[i].tel);
printf("---posunhaohui:\n");
scanf("%s",&infor[i].posun); //直接輸入破損費
printf("---yisunchuli:\n"); //直接輸入遺損耗費
scanf("%s",&infor[i].yisun);
printf("\n是否繼續(xù)輸入?(y/n)\n");//是否繼續(xù)輸入設備信息?
scanf("%s",&k);
fwrite(&infor[i],sizeof(struct eq_infor),1,fp);
} //保存輸入的設備信息
if(toupper(k)=='N'||(k)=='n') //停止輸入
{
fclose(fp); //關閉文件
printf("輸入完畢,任意鍵返回\n");
getch();
system("cls");
jiemian(); //返回界面管理系統(tǒng)
}
}
void delet() //修改函數(shù)
{
FILE * fp;
int j,a,i,n;int flag;char c;
long num;
char name[20]; //名稱
char sort[20]; //類別
char date[20]; //購買日期
char repairmen[20];//維護人
char lab[20]; //實驗室
char discount[20];//折舊率
char factory[20]; //生產(chǎn)商
char tel[20]; //故障維護電話
char posun[20]; //破損耗費
char yisun[20]; //遺損處理
flag=1;
while(flag)
{
if((fp=fopen("eq_infor.txt","r+"))==NULL)
{
printf("can not open file\n");
return;}
for(i=0;i<100;i++)
{ if(fread(&infor[i],sizeof(struct eq_infor),1,fp)==0) break;}
fclose(fp);
n=i;
fp=fopen("eq_infor.txt","w+");
printf("\f請輸入您要修改的設備編號:");scanf("%ld",&j);
printf("\n ━━━━━━━━━━━━━━━━━━━━━ ");
printf("\n 1 設備名稱 2 設備類別 ");
printf("\n 3 設備購買日期 4 設備維護人 ");
printf("\n 5 設備所在實驗室 6 設備折舊率 ");
printf("\n 7 設備生產(chǎn)廠商 ");
printf("\n ━━━━━━━━━━━━━━━━━━━━━ \n");
printf("\n\f請輸入您需要服務的種類的序號:");scanf("%d",&a);
printf("\n\f請輸入您需要修改的內(nèi)容:");scanf("%d",&a);
switch(a) //逐個信息修改
{
case 1 : scanf("%s",name); strcpy(infor[j-1].name,name);break;
case 2 : scanf("%s",sort); strcpy(infor[j-1].sort,sort); break;
case 3 : scanf("%s",date); strcpy(infor[j-1].date,date); break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -