C语言 求解
#include <stdio.h>#include <stdlib.h>
#include <windows.h>
void input(); /*宿舍信息添加函数*/
void del(); /*宿舍信息删除函数*/
void find(); /*宿舍信息查找函数*/
void sort(); /*宿舍信息排序函数*/
void view(); /*宿舍信息显示函数*/
typedef struct stu{ /*定义链表节点的结构体类型*/
int num; /*学号*/
char name; /*姓名*/
char stay; /*所在系*/
char clas; /*班级*/
int sus; /*宿舍*/
intphone; /*电话号码*/
char bed; /*床位*/
struct stu *next;
}STU;
STU *create() /*读取文件并创建链表*/
{ int n=0;
FILE *fp;
STU *head,*p1,*p2;
fp=fopen("wzw","r"); /*打开wzw文件*/
if(fp==NULL)
{ printf("打开文件失败");
getchar();
exit(0);
}
head=NULL;
p1=p2=(STU*)malloc(sizeof(STU));
while(!feof(fp)) /*读入文件数据并创建链表*/
{ fscanf(fp,"%d%s%s%s%d%d%s",&p1->num,&p1->name,&p1->stay,&p1->clas,&p1->sus,&p1->phone,&p1->bed);
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(STU*)malloc(sizeof(STU));
}
p2->next=NULL;
free(p1);
fclose(fp);
return(head);
}
void main()
{char c;
do
{ system("cls");
printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf(" \n");
printf("\t\t 欢迎使用学生信息管理系统 \n");
printf(" \n");
printf("\t\t 自动化101 翁志文 10417126 \n");
printf(" \n");
printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf(" \n");
printf("\t\t 1: 添加宿舍信息 \n");
printf("\t\t 2: 删除宿舍信息 \n");
printf("\t\t 3: 查找宿舍信息 \n");
printf("\t\t 4: 宿舍信息排序 \n");
printf("\t\t 5: 宿舍信息显示 \n");
printf("\t\t 6: 退出 \n");
printf(" \n");
printf(" \n");
printf("\t\t请选择输入选项:>");
do
{c=getchar();
}while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6');
getchar();
switch(c)
{ case '1': input(); break;
case '2' : del(); break;
case '3': find();break;
case '4': sort();break;
case '5': view();break;
case '6': exit(0); break;
}
printf(" 按任意键返回主菜单:\n");
getchar();
system("cls");
}while(1);
}
void input() /*宿舍信息添加功能函数*/
{ int m=1,n=0; /*输入信息的循环变量m*/
FILE *fp; /*文件指针fp*/
STU *p,*head,*p1,*p2;
head=NULL; /*头结点为NULL*/
system("cls");
p1=p2=(STU*)malloc(sizeof(STU)); /*动态申请一个新节点*/
while(m) /*输入学生宿舍信息并创建链表*/
{ printf("请输入学生宿舍信息");
printf("\n");
printf("请输入学号:");
scanf("%d",&p1->num);
printf("请输入姓名:");
scanf("%s",&p1->name);
printf("请输入所在系:");
scanf("%s",&p1->stay);
printf("请输入班级:");
scanf("%s",&p1->clas);
printf("请输入宿舍号:");
scanf("%d",&p1->sus);
printf("请输入电话号码:");
scanf("%d",&p1->phone);
printf("请输入床位:");
scanf("%s",&p1->bed);
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(STU*)malloc(sizeof(STU));
printf("请选择 0:结束输入1:继续输入\n");
scanf("%d",&m);
}
p2->next=NULL;
free(p1); /*释放p1指向的节点内存*/
fp=fopen("wzw","a+"); /*打开文件wzw*/
p=head;
while(p) /*将输入的学生宿舍信息保存到文件*/
{fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
p=p->next;
}
fclose(fp); /*关闭文件*/
}
void del() /*宿舍信息删除功能函数*/
{ FILE *fp;
int num,sus,j,i;
STU *head,*p1,*p2,*p3;
head=create();
system("cls");
printf("请选择删除方式的序号 1:宿舍号 2:学号\n");
scanf("%d",&i);
if(i==1)
{ printf("请输入要删除的学生宿舍号:\n");
scanf("%d",&sus);
if(head==NULL)
{printf("\n文件内容为空!\n");
exit(0);
}
p1=head;
while(sus!=p1->sus&&p1->next!=NULL)
{p2=p1;
p1=p1->next;
}
if(sus==p1->sus)
{printf("学生信息已找到:\n");
printf("学号 姓名\t 所在系\t班级\t宿舍号\t电话\t床号\n");
printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
printf("是否删除 1:是 2:否\n");
scanf("%d",&j);
if(j==1)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
fp=fopen("wzw","w"); /*打开文件wzw*/
p3=head;
while(p3->next) /*将输入的学生宿舍信息保存到文件*/
{ fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
p3=p3->next;
}fclose(fp);
}
}
else
printf("找不到此学生宿舍信息\n");
}
if(i==2)
{ printf("请输入要删除的学生学号:\n");
scanf("%d",&num);
if(head==NULL)
{
printf("\n文件内容为空!\n");
exit(0);
}
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{ p2=p1;
p1=p1->next;
}
if(num==p1->num)
{printf("学生宿舍信息已找到:\n");
printf("学号 姓名\t 所在系\t班级\t宿舍号\t电话\t床号\n");
printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
printf("是否删除 1:是 2:否\n");
scanf("%d",&j);
if(j==1)
{if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
fp=fopen("wzw","w"); /*打开文件wzw*/
p3=head;
while(p3->next) /*将输入的学生宿舍信息保存到文件*/
{fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
p3=p3->next;
}fclose(fp);
}
}
else
printf("找不到此学生宿舍信息\n");
}
printf("请选择序号 1:继续删除 2:结束删除\n");
scanf("%d",&j);
if(j==1)
del();
}
void find() /*宿舍信息查找功能函数*/
{ int i,j,k=0; /*定义i为查找方式;定义j为学号变量*/
STU *head,*p;
head=create();
system("cls");
printf("请选择查找方法的序号:1.按学号查找2.按宿舍号查找\n");
scanf("%d",&i);
if(i==1) /*按学号查找*/
{ printf("请输入要查找的学号:");
scanf("%d",&j);
p=head;
while((j!=p->num)&&(p->next!=NULL))
p=p->next;
if(j==p->num) /*查到宿舍信息并输出*/
{ printf("学生宿舍信息已找到:\n");
printf("学号 姓名\t 所在系\t班级\t宿舍号\t电话\t床号\n");
printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
}
else /*无此学生信息*/
printf("抱歉,没有此学生信息\n");
}
if(i==2) /*按宿舍号查找*/
{printf("请输入要查找的宿舍号:");
scanf("%d",&j);
p=head;
while((j!=p->sus)&&(p->next!=NULL))
p=p->next;
if(j==p->sus) /*查到宿舍信息并输出*/
{ printf("学生宿舍信息已找到:\n");
printf("学号 姓名\t所在系\t班级\t宿舍号\t电话号码\t床号\n");
printf("%-5d%s\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
}
else /*无此学生宿舍信息*/
printf("抱歉,没有此学生信息\n");
}
free(p);
printf("请选择正确序号 1:继续查找 2:结束查找\n");
scanf("%d",&i);
if(i==1)
find();
if(i==2)
getchar();
}
void sort() /*定义学生信息排序功能函数*/
{ STU *head,*p0,*p1,*p2,*pt=NULL;
int a,j,k,i=0,n;
head=create();
system("cls");
printf("请选择您想要的排序方式按数字选择:1、按系排序2、按班级排序 请输入选项:");
scanf("%d",&a);
getchar();
if(a==1) /*按系排序*/
{ pt=(STU *)malloc(sizeof(STU));
p1=head;
while(p1!=NULL)
{i++;
p1=p1->next;
}
p1=head;
for(j=0;j<i-1;j++) /*用冒泡法排序*/
{p1=head;
for(k=0;k<i-1-j;k++)
{p2=p1;
p1=p1->next;
if(strcmp(p2->stay,p1->stay)>0)/*交换两链表间数据*/ { n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
n=p2->sus;p2->sus=p1->sus;p1->sus=n;
n=p2->phone;p2->phone=p1->phone;p1->phone=n;
strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
}
}
}
printf("排序成功!!");
printf("\n");
p0=head;
printf("学号 姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
while(p0->next!=NULL)
{printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
printf("\n");
p0=p0->next;
}
}
if(a==2) /*按班级排序*/
{ pt=(STU *)malloc(sizeof(STU));
p1=head;
while(p1!=NULL)
{ i++;
p1=p1->next;
}
p1=head;
for(j=0;j<i-1;j++) /*用冒泡法排序*/
{p1=head;
for(k=0;k<i-1-j;k++)
{p2=p1;
p1=p1->next;
if(strcmp(p2->clas,p1->clas)>0)/*交换两链表间数据*/
{ n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
n=p2->sus;p2->sus=p1->sus;p1->sus=n;
n=p2->phone;p2->phone=p1->phone;p1->phone=n;
strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
}
}
}
printf("排序成功!!");
printf("\n");
p0=head;
printf("学号 姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
while(p0->next!=NULL)
{printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
printf("\n");
p0=p0->next;
}
}
}
void view() /*定义学生信息显示功能函数*/
{ FILE *fp;
char ch;
fp=fopen("wzw","r");
ch=fgetc(fp);
system("cls");
printf("学号 姓名\t 所在系 班级\t宿舍号\t 电话号码 床号\n");
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
printf("\n");
}
这个程序 添加信息后怎么保存啊??我想下次打开后能直接查找宿舍信息
#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; //宿舍//
char name;//姓名//
char zhuan; //专业//
char num; //学号//
char tel; //电话//
}xin;//结构体数组//
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.sushe); //输入宿舍号//
printf("姓名:");
scanf("%s",&xin.name); //输入姓名//
printf("专业:");
scanf("%s",&xin.zhuan); //输入专业//
printf("学号:");
scanf("%s",&xin.num); //输入学号//
printf("电话:");
scanf("%s",&xin.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,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,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,sizeof(struct xinxi),1,fp_1);
if(strcmp(xin.num,a)==0)//将文件里的数据逐一与字符串a比较//
{
u=1;//若有相同的字符串,u值为1。//
printf("姓名:%s\n",xin.name); //输出信息//
printf("学号:%s\n",xin.num);
printf("专业:%s\n",xin.zhuan);
printf("电话:%s\n",xin.tel);
printf("宿舍号:%s\n",xin.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,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,sizeof(struct xinxi),1,fp_1);
if(strcmp(xin.sushe,a)==0)
{
u=1;
printf("姓名:%s\n",xin.name);
printf("学号:%s\n",xin.num);
printf("专业:%s\n",xin.zhuan);
printf("电话:%s\n",xin.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,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,sizeof(struct xinxi),1,fp_1);
if(strcmp(xin.name,a)==0)
{
u=1;
printf("姓名:%s\n",xin.name);
printf("学号:%s\n",xin.num);
printf("专业:%s\n",xin.zhuan);
printf("电话:%s\n",xin.tel);
printf("宿舍号:%s\n",xin.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;
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,sizeof(struct xinxi),1,fp_1);
if(strcmp(xin.name,a)==0) //若数据文件里有相关信息//
{
u=1; //u赋值为1//
printf("\n宿舍号:%s\n",xin.sushe);
printf("姓名:%s\n",xin.name);
printf("学号:%s\n",xin.num);
printf("专业:%s\n",xin.zhuan);
printf("电话:%s\n",xin.tel);
printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
getchar();
ch=getchar();
if(ch=='y'||ch=='Y') //确认修改//
{
printf("请输入新信息\n");//输入新信息//
printf("宿舍号:");
scanf("%s",xin.sushe);
printf("姓名:");
scanf("%s",xin.name);
printf("学号:");
scanf("%s",xin.num);
printf("专业:");
scanf("%s",xin.zhuan);
printf("电话:");
scanf("%s",xin.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,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;
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,sizeof(struct xinxi),1,fp_1);
if(strcmp(xin.num,a)==0) //若数据文件里有相关信息//
{
u=1; //u赋值为1//
printf("\n宿舍号:%s\n",xin.sushe);
printf("姓名:%s\n",xin.name);
printf("学号:%s\n",xin.num);
printf("专业:%s\n",xin.zhuan);
printf("电话:%s\n",xin.tel);
printf("是否要修改以上信息?(Y/N)\n");//询问是否修改//
getchar();
ch=getchar();
if(ch=='y'||ch=='Y') //确认修改//
{
printf("请输入新信息\n");//输入新信息//
printf("宿舍号:");
scanf("%s",xin.sushe);
printf("姓名:");
scanf("%s",xin.name);
printf("学号:");
scanf("%s",xin.num);
printf("专业:");
scanf("%s",xin.zhuan);
printf("电话:");
scanf("%s",xin.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,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,sizeof(struct xinxi),1,fp_1);
printf("姓名:%s\n",xin.name);
printf("学号:%s\n",xin.num);
printf("专业:%s\n",xin.zhuan);
printf("电话:%s\n",xin.tel);
printf("宿舍号:%s\n",xin.sushe);
printf("\n");
}fclose(fp);//关闭数据文件//
fclose(fp_1);//关闭信息文件//
system("pause");
zhuti(); //返回主体函数//
}
送你个可以用文本保存的吧:sweat: 太多了,看着眼花,把问题简化啊 添加数据存储,通过文件File *file写入txt,保存.或是excel,或者用数据库,简单的access,复杂些的sql,mysql 你可以设计一个算法,以指针数组为一个表(一个系)每一个数组元素又指向这个班的file,然后这个班的file就是所有同学的信息,最后再写个函数新建一份系统资料(file)来存储各种系统信息如已经有多少个班每个班有多少个同学 ,当然这一切都得注意格式了哈。
页:
[1]