|
发表于 2014-7-7 00:44:44
|
显示全部楼层
#include<stdio.h>
#include"windows.h"
#include<stdlib.h>
#include<string.h>
#define pass 12345 //密码设定//
#define M 2000 //数据容量//
int data,i; //定义全局变量data和i//
struct xinxi //定义结构体//
{
char sushe[20]; //宿舍//
char name[40]; //姓名//
char zhuan[40]; //专业//
char num[40]; //学号//
char tel[40]; //电话//
}xin[M]; //结构体数组//
int main() //主函数//
{
void zhuti(); //主体函数声明//
int min,a=4; //a为密码最多输入次数//
printf("******************************************************\n"); //页面//
printf("* 欢迎来到神兽宿舍管理系统 *\n");
printf("* || || *\n");
printf("* ┏━━━━ ━━━━┓ *\n");
printf("* ┃ ━ ┃ *\n");
printf("* ┃ ┳┛ ┗┳ ┃ *\n");
printf("* ┃ ┃ *\n");
printf("* ┃ ┻ ┃ *\n");
printf("* ┃ ┃ *\n");
printf("* ┗━━━━ ━━━━┛ *\n");
printf("* 土豪版 *\n");
printf("******************************************************\n");
system("pause"); //任意键进入//
system("cls");
do{ //密码输入//
printf(" 请输入登陆密码: ");
scanf("%d",&min);
if(!(min==pass)){ system("cls");
a=a-1;
if(a==0)exit(0);
printf(" 密码错误 还有%d次机会 ",a); //密码错误a次后退出程序 //
Sleep(1000);
system("cls");}
system("cls");
}while(!(min==pass)); //输入正确进入主体函数//
zhuti();
return 0;}
void zhuti() //主题函数//
{
void xiugai(); //修改函数声明//
void luru(); //录入函数声明//
void chaxun(); //查询函数声明//
void zonglan(); //总览函数声明//
void shanchu(); //删除函声明//
int c;
char b;
for(c=1;c>0;c++) //输入其他选项无限循环//
{
system("cls");
printf("1.添加信息\n");
printf("2.修改信息\n");
printf("3.删除信息\n");
printf("4.查找\n");
printf("5.总览\n");
printf("6.结束\n");
printf("请输入服务项目:");
getchar(); //得到个字符//
b=getchar(); //赋值给b变量//
switch(b)
{
case 49 : luru(); //添加函数//
case 50 : xiugai(); //修改函数//
case 51 : shanchu(); //删除函数//
case 52 : chaxun(); //查询函数//
case 53 : zonglan(); //总览函数//
case 54 : {system("cls");
exit(0);} //退出函数//
default : break;
}
}
}
void luru() //添加函数定义//
{
void save(); //存储函数声明//
char ch;
int n;
FILE * fp; //定义结构体指针//
system("cls");
if((fp=fopen("data.dat","rb"))==NULL) //第一次新建数据文件//
{
data=0; //data赋初值,0//
fp=fopen("data.dat","wb");
fwrite(&data,4,1,fp);
fclose(fp);
}
printf("输入数据个数:");
scanf("%d",&n);
system("cls");
for(i=0;i<n;i++)
{
fread(&data,4,1,fp); //读出记录次数//
fclose(fp);
printf("宿舍号:"); //输入信息//
scanf("%s",&xin[data].sushe); //输入宿舍号//
printf("姓名:");
scanf("%s",&xin[data].name); //输入姓名//
printf("专业:");
scanf("%s",&xin[data].zhuan); //输入专业//
printf("学号:");
scanf("%s",&xin[data].num); //输入学号//
printf("电话:");
scanf("%s",&xin[data].tel); //输入电话//
save();
data=data+1;
printf("\n");
if((fp=fopen("data.dat","wb"))==NULL)
{ printf("can't open file\n");
exit(0); }
fwrite(&data,4,1,fp); //写入次数//
fclose(fp);}
printf("数据已储存\n");
if(data>=M-20)printf("数据存储空间不足,请及时清理。");
Sleep(800);
printf("是否继续?(y/n)\n"); //Y继续 N退出//
getchar();
ch=getchar();
if(ch=='y'||ch=='Y')//如果输入的字符为Y,再次进入录入函数。//
{luru();}
else if(ch=='n'||ch=='N')
{system("cls");
zhuti();}
else
{system("cls");
zhuti();} //N 或其他字符 返回菜单//
}
void save() //存储函数定义//
{
FILE * fp_1;
if((fp_1=fopen("xin.dat","ab"))==NULL) //用追加写入的方式打开信息的二进制文件//
{ printf("can't open file\n");}
fseek(fp_1,data*sizeof(struct xinxi),0);
if(fwrite(&xin[data],sizeof(struct xinxi),1,fp_1)!=1)//将数据写入信息的二进制文件//
{printf("file write error\n");}
fclose(fp_1); //关闭文件//
}
void chaxun() //查询函数定义//
{
void search_sushe(); //宿舍号查询声明//
void search_xuehao(); //学号查询声明//
void search_name(); //姓名查询声明//
char flag,h; //flag变量//
do{ //循环体,直到输入正确选项,循环结束//
system("cls");
printf("1.按学号查找\n");
printf("2.按宿舍查找\n");
printf("3.按姓名查找\n");
printf("4.返回\n");
printf("5.退出\n");
printf("请输入选项:");
getchar();
h=getchar();
switch(h)
{
case 49 : {flag=1;
search_xuehao(); } //若输入字符1,进入学号查找函数。将1赋值给flag,跳出循环体。//
case 50 : {flag=1;
search_sushe(); } //若输入字符2,进入宿舍查找函数。将1赋值给flag,跳出循环体。//
case 51 : {flag=1;
search_name(); } //若输入字符3,进入姓名查找函数。将1赋值给flag,跳出循环体。//
case 52 : zhuti(); //返回主体函数//
case 53 : exit(0); //退出程序//
default:flag=0; //输入其他字符,flag的值为0.//
}
}while(flag==0);
}
void search_xuehao() //学号查询定义//
{
FILE * fp_1, * fp; //定义结构体指针fp_1,fp.//
int u=0;
char a[40],ch_1;
if((fp=fopen("data.dat","rb"))==NULL)//打开data文件//
{
printf("cannot open file\n");
exit(0);
}
fread(&data,4,1,fp);
system("cls");
printf("请输入学号:");
scanf("%s",a); //输入字符串//
printf("\n");
if((fp_1=fopen("xin.dat","rb"))==NULL)//打开信息文件//
{
printf("没有相关数据\n");
Sleep(1000);
zhuti();
}
for(i=0;i<=data-1;i++)//由于data是加1存储,所以真正文件里的数据数量为data//
{
fseek(fp_1,i*sizeof(struct xinxi),0);
fread(&xin[i],sizeof(struct xinxi),1,fp_1);
if(strcmp(xin[i].num,a)==0)//将文件里的数据逐一与字符串a比较//
{
u=1; //若有相同的字符串,u值为1。//
printf("姓名:%s\n",xin[i].name); //输出信息//
printf("学号:%s\n",xin[i].num);
printf("专业:%s\n",xin[i].zhuan);
printf("电话:%s\n",xin[i].tel);
printf("宿舍号:%s\n",xin[i].sushe);
printf("\n");
}
}
fclose(fp);//关闭数据文件//
fclose(fp_1);//关闭信息文件//
if(u==0)//若没有相同字符串,会到主体函数。//
{printf("没有相关信息\n");
Sleep(1000);
zhuti();}
printf("是否继续?(Y/N)\n");
getchar();
ch_1=getchar();
if(ch_1=='y'||ch_1=='Y')
{ search_xuehao();}
else if(ch_1=='n'||ch_1=='N')
{system("cls");
zhuti();}
else
{system("cls");
search_xuehao();}
}
void search_sushe() //宿舍查询定义//
{
FILE * fp_1, * fp;
int u=0;
char a[20],ch_1;
if((fp=fopen("data.dat","rb"))==NULL)
{
printf("cannot open file\n");
Sleep(1000);
system("cls");
zhuti();
}
fread(&data,4,1,fp);
system("cls");
printf("请输入宿舍:");
scanf("%s",a);
printf("\n");
if((fp_1=fopen("xin.dat","rb"))==NULL)
{
printf("没有相关数据\n");
Sleep(1000);
system("cls");
zhuti();
}
for(i=0;i<=data-1;i++)
{
fseek(fp_1,i*sizeof(struct xinxi),0);
fread(&xin[i],sizeof(struct xinxi),1,fp_1);
if(strcmp(xin[i].sushe,a)==0)
{
u=1;
printf("姓名:%s\n",xin[i].name);
printf("学号:%s\n",xin[i].num);
printf("专业:%s\n",xin[i].zhuan);
printf("电话:%s\n",xin[i].tel);
printf("\n");
}
}
fclose(fp);
fclose(fp_1);
if(u==0)
{printf("没有相关信息\n");
Sleep(1000);
system("cls");
chaxun();}
printf("是否继续?(Y/N)\n");
getchar();
ch_1=getchar();
if(ch_1=='y'||ch_1=='Y')
{ search_sushe();}
else if(ch_1=='n'||ch_1=='N')
{system("cls");
zhuti();}
else
{system("cls");
search_sushe();}
}
void search_name() //姓名查询定义//
{
FILE * fp_1, * fp;
int u=0;
char a[40],ch_1;
if((fp=fopen("data.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fread(&data,4,1,fp);
system("cls");
printf("请输入姓名:");
scanf("%s",a);
printf("\n");
if((fp_1=fopen("xin.dat","rb"))==NULL)
{
printf("没有相关数据\n");
Sleep(1000);
system("cls");
zhuti();
}
for(i=0;i<=data-1;i++)
{
fseek(fp_1,i*sizeof(struct xinxi),0);
fread(&xin[i],sizeof(struct xinxi),1,fp_1);
if(strcmp(xin[i].name,a)==0)
{
u=1;
printf("姓名:%s\n",xin[i].name);
printf("学号:%s\n",xin[i].num);
printf("专业:%s\n",xin[i].zhuan);
printf("电话:%s\n",xin[i].tel);
printf("宿舍号:%s\n",xin[i].sushe);
printf("\n");
}
}
fclose(fp);
fclose(fp_1);
if(u==0)
{printf("没有相关信息\n");
Sleep(1000);
zhuti();}
printf("是否继续?(Y/N)\n");
getchar();
ch_1=getchar();
if(ch_1=='y'||ch_1=='Y')
{ search_xuehao();}
else if(ch_1=='n'||ch_1=='N')
{system("cls");
zhuti();}
else
{system("cls");
search_name();}
}
void shanchu() //查询函数定义//
{
char ch;
system("cls");
printf("1.全部删除\n");
printf("2.返回\n");
printf("请输入选项:");
getchar();
ch=getchar();
switch(ch)
{
case 49 : { remove("data.dat");//删除数据文件//
remove("xin.dat");//删除信息文件//
printf("数据已删除");
Sleep(1000); }
case 50 : zhuti();
default : shanchu();
}
}
void xiugai()
{
char ch;
void xiugai_xuehao();
void xiugai_name();
system("cls");
printf("1.按学号查找修改\n");
printf("2.按姓名查找修改\n");
printf("3.返回\n");
printf("请输入选项:");
getchar();
ch=getchar();
switch(ch)
{
case 49 : xiugai_xuehao();
case 50 : xiugai_name();
case 51 : zhuti();
default : xiugai();
}
}
void xiugai_name() //修改函数定义//
{
char ch,a[40];
int u=0;
FILE * fp,* fp_1;
if((fp=fopen("data.dat","rb"))==NULL)//打开数据文件//
{
printf("cannot open file\n");
Sleep(1000);
system("cls");
zhuti();
}
fread(&data,4,1,fp); //读出data的值//
system("cls");
fclose(fp);//关闭数据文件//
if((fp_1=fopen("xin.dat","rb"))==NULL)//打开数据文件//
{
printf("没有相关数据\n");
Sleep(1000);
system("cls");
zhuti();
}
printf("输入要修改人员的姓名:");
scanf("%s",a);//输入字符串//
printf("\n");
for(i=0;i<=data-1;i++)
{
fseek(fp_1,i*sizeof(struct xinxi),0);
fread(&xin[i],sizeof(struct xinxi),1,fp_1);
if(strcmp(xin[i].name,a)==0) //若数据文件里有相关信息//
{
u=1; //u赋值为1//
printf("\n宿舍号:%s\n",xin[i].sushe);
printf("姓名:%s\n",xin[i].name);
printf("学号:%s\n",xin[i].num);
printf("专业:%s\n",xin[i].zhuan);
printf("电话:%s\n",xin[i].tel);
printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
getchar();
ch=getchar();
if(ch=='y'||ch=='Y') //确认修改//
{
printf("请输入新信息\n"); //输入新信息//
printf("宿舍号:");
scanf("%s",xin[i].sushe);
printf("姓名:");
scanf("%s",xin[i].name);
printf("学号:");
scanf("%s",xin[i].num);
printf("专业:");
scanf("%s",xin[i].zhuan);
printf("电话:");
scanf("%s",xin[i].tel);
}
}
}
fclose(fp_1); //关闭信息文件//
if(u==1) //若信息文件里有相关信息//
{
remove("xin.dat"); //删除原文件//
for(i=0;i<=data-1;i++)
{
if((fp_1=fopen("xin.dat","ab"))==NULL)//新建信息文件//
{ printf("can't open file\n");}
fseek(fp_1,i*sizeof(struct xinxi),0);
if(fwrite(&xin[i],sizeof(struct xinxi),1,fp_1)!=1) //重新导入新信息//
{printf("file write error\n");}
fclose(fp_1); //关闭信息文件//
}
printf("修改成功\n");
system("pause"); //任意键进入//
}
if(u==0)printf("没有相关信息\n");//如果没有相关信息,给予提示。//
Sleep(1500);
system("cls");
zhuti(); //返回主体函数//
}
void xiugai_xuehao() //修改函数定义//
{
char ch,a[40];
int u=0;
FILE * fp,* fp_1;
if((fp=fopen("data.dat","rb"))==NULL)//打开数据文件//
{
printf("cannot open file\n");
Sleep(1000);
system("cls");
zhuti();
}
fread(&data,4,1,fp); //读出data的值//
system("cls");
fclose(fp);//关闭数据文件//
if((fp_1=fopen("xin.dat","rb"))==NULL)//打开数据文件//
{
printf("没有相关数据\n");
Sleep(1000);
system("cls");
zhuti();
}
printf("输入要修改人员的学号:");
scanf("%s",a);//输入字符串//
printf("\n");
for(i=0;i<=data-1;i++)
{
fseek(fp_1,i*sizeof(struct xinxi),0);
fread(&xin[i],sizeof(struct xinxi),1,fp_1);
if(strcmp(xin[i].num,a)==0) //若数据文件里有相关信息//
{
u=1; //u赋值为1//
printf("\n宿舍号:%s\n",xin[i].sushe);
printf("姓名:%s\n",xin[i].name);
printf("学号:%s\n",xin[i].num);
printf("专业:%s\n",xin[i].zhuan);
printf("电话:%s\n",xin[i].tel);
printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
getchar();
ch=getchar();
if(ch=='y'||ch=='Y') //确认修改//
{
printf("请输入新信息\n"); //输入新信息//
printf("宿舍号:");
scanf("%s",xin[i].sushe);
printf("姓名:");
scanf("%s",xin[i].name);
printf("学号:");
scanf("%s",xin[i].num);
printf("专业:");
scanf("%s",xin[i].zhuan);
printf("电话:");
scanf("%s",xin[i].tel);
}
else if(ch=='n'||ch=='N')//不修改//
{system("cls");
zhuti();}
else
{system("cls"); //输入其他字符,返回修改函数。//
xiugai();}
}
}
fclose(fp_1); //关闭信息文件//
if(u==1) //若信息文件里有相关信息//
{
remove("xin.dat"); //删除原文件//
for(i=0;i<=data-1;i++)
{
if((fp_1=fopen("xin.dat","ab"))==NULL)//新建信息文件//
{ printf("can't open file\n");}
fseek(fp_1,i*sizeof(struct xinxi),0);
if(fwrite(&xin[i],sizeof(struct xinxi),1,fp_1)!=1) //重新导入新信息//
{printf("file write error\n");}
fclose(fp_1); //关闭信息文件//
}
printf("修改成功\n");
system("pause"); //任意键进入//
}
if(u==0)printf("没有相关信息\n");//如果没有相关信息,给予提示。//
Sleep(1500);
system("cls");
zhuti(); //返回主体函数//
}
void zonglan() //总览函数定义//
{
FILE * fp_1, * fp;
if((fp=fopen("data.dat","rb"))==NULL) //打开数据文件//
{
printf("cannot open file\n");
Sleep(1000);
system("cls");
zhuti();
}
fread(&data,4,1,fp); //读出数据文件//
system("cls");
if((fp_1=fopen("xin.dat","rb"))==NULL) //打开信息文件//
{
printf("没有相关数据\n");
Sleep(1000);
system("cls");
zhuti();
}
for(i=0;i<=data-1;i++)//将信息文件的信息逐一写出//
{
fseek(fp_1,i*sizeof(struct xinxi),0);
fread(&xin[i],sizeof(struct xinxi),1,fp_1);
printf("姓名:%s\n",xin[i].name);
printf("学号:%s\n",xin[i].num);
printf("专业:%s\n",xin[i].zhuan);
printf("电话:%s\n",xin[i].tel);
printf("宿舍号:%s\n",xin[i].sushe);
printf("\n");
} fclose(fp);//关闭数据文件//
fclose(fp_1);//关闭信息文件//
system("pause");
zhuti(); //返回主体函数//
}
送你个可以用文本保存的吧:sweat: |
|