资源描述
. .
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义学生构造体
struct Student
{
int dorNo; //宿舍号
char stuName[20]; //学生XX
int stuNo; //学生学号
char stuSex[10]; //性别
char dept[20]; //系别
char major[20]; //专业
int tel; //
} *stu;
//函数指针
void(*p)(struct Student *,int );
//录入学生信息
void insert(struct Student *,int );
//按学号查找
void noSeek(struct Student *,int );
//函数功能:打印信息
void output(struct Student *,int );
/*函数功能:将数据写入文件*/
void write(struct Student *,int );
/*函数功能:读取文件数据*/
void read(struct Student *,int );
//按宿舍查找
void dSeek(struct Student *,int );
//按XX查找
void naSeek(struct Student *,int );
//按系别查找
void deSeek(struct Student *,int);
//删除学生信息
void del(struct Student *,int );
//修改学生信息
void modify(struct Student *,int );
//增加学生信息
void add(struct Student *,int);
//全局变量来记录存储学生的人数
int num=0;
//主函数
int main()
{
char ch[10];
printf(" \t--------欢迎进入宿舍管理系统--------\n");
printf("请输入你想存储的学生人数:") ;
scanf("%d",&num);
system("cls");
//申请动态存储空间
stu=(struct Student *)malloc((sizeof(struct Student))*num);
while(1){
system("cls");
printf("\n");
printf(" \t--------欢迎进入宿舍管理系统--------\n");
printf(" \t ***********************************************************\n");
printf(" \t1.录入学生信息 ");
printf(" \t2.按学号查询 \n");
printf(" \t3.按宿舍号查询 ");
printf(" \t4.按XX查询 \n");
printf(" \t5.按系别或专业查询 ");
printf(" \t6.添加信息 \n");
printf(" \t7.修改信息 ");
printf(" \t8.保存信息 \n");
printf(" \t9.读取信息 ");
printf(" \t10.删除信息 \n");
printf(" \t0.退出系统 \n");
printf(" \t*************************************************************\n");
printf("------------------------------------------------------------------\n");
printf(" \t请选择你想实现的功能:");
scanf("%s",&ch);
//用函数指针指向各函数
if(strcmp(ch,"1")==0)
{
p=insert;
(*p)(stu,num);
}
else if (strcmp(ch,"2")==0)
{
p=noSeek;
(*p)(stu,num);
}
else if(strcmp(ch,"3")==0)
{
p=dSeek;
(*p)(stu,num);
}
else if(strcmp(ch,"4")==0)
{
p=naSeek;
(*p)(stu,num);
}
else if(strcmp(ch,"5")==0)
{
p=deSeek;
(*p)(stu,num);
}
else if(strcmp(ch,"6")==0)
{
p=add;
(*p)(stu,num);
}
else if(strcmp(ch,"7")==0)
{
p=modify;
(*p)(stu,num);
}
else if(strcmp(ch,"8")==0)
{
p=write;
(*p)(stu,num);
}
else if(strcmp(ch,"9")==0)
{
p=read;
(*p)(stu,num);
}
else if(strcmp(ch,"10")==0)
{
p=del;
(*p)(stu,num);
}
else if(strcmp(ch,"0")==0)
{
exit(0);
}
// write(stu,num);
//read(stu,num);
}
return 0;
}
//输入学生相关信息
void insert(struct Student *stu,int num)
{
int i=0;
char ch;
system("cls");
do{
if(i<num)
{
printf("输入第%d个学生的宿舍号:",i+1);
scanf("%d",&stu[i].dorNo) ;
printf("\nXX:");
scanf("%s",&stu[i].stuName);
printf("\n学号:");
scanf("%d",&stu[i].stuNo);
printf("\n性别:");
scanf("%s",&stu[i].stuSex);
printf("\n系别:");
scanf("%s",&stu[i].dept);
printf("\n专业:");
scanf("%s",&stu[i].major);
printf("\n:");
scanf("%d",&stu[i].tel);
i++;
}
else
{
printf(" \n\t 人数已满无法继续输入");
printf("\n是退出该功能输入?(Y/N):");
ch=getchar();
ch=getchar();
}
}while(ch!='y'&&ch!='Y');
write(stu,num);
system("cls");
}
//按学号查找
void noSeek(struct Student *stu,int num)
{
int i;
int m;
char ch;
char a;
system("cls");
printf("\n确认您已录入学生信息?<y/n>:");
a=getchar();
a=getchar();
if(a!='n'&&a!='N')
{
printf("\n请输入你想要查找的学生学号:");
scanf("%d",&m);
for(i=0;i<num;i++)
{
if(m==stu[i].stuNo)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
}
}
else
{
printf("\n\t 没有你要查找的学生信息。\n") ;
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
//按宿舍查找
void dSeek(struct Student* stu,int num )
{
int i;
int dor;
char ch,a;
system("cls");
printf("\n确认您已录入学生信息?<y/n>:");
a=getchar();
a=getchar();
if(a!='n'&&a!='N')
{
printf("\n请输入你想要查找的学生宿舍号:");
scanf("%d",&dor);
for(i=0;i<num;i++)
{
if(dor==stu[i].dorNo)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
}
}
else
{
printf(" \t 没找到你要的学生信息。。。\n\n");
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
//按XX查询
void naSeek(struct Student *stu,int num)
{
int i;
char name[20];
char ch,a;
system("cls");
printf("\n确认您已录入学生信息?<y/n>:");
a=getchar();
a=getchar();
if(a!='n'&&a!='N')
{
printf("\n请输入你想要查找的学生XX:");
scanf("%s",name);
for(i=0;i<num;i++)
{
if(strcmp(name,stu[i].stuName)==0)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
}
}
else
{
printf(" \n \n\t 没找到你要的学生信息。。。\n\n");
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
//按系别或专业查询
void deSeek(struct Student *stu,int num)
{
int i;
char de[20];
char ch,a;
system("cls");
printf("\n确认您已录入学生信息?<y/n>:");
a=getchar();
a=getchar();
if(a!='n'&&a!='N')
{
printf("\n\t 请输入你想要查找的系别或专业:");
scanf("%s",de);
for(i=0;i<num;i++)
{
if(strcmp(de,stu[i].dept)==0)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
}
}
else
{
printf(" \n\n\t 没找到你要的学生信息。。。\n");
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
/*函数功能:将数据写入文件*/
void write(struct Student *stu,int num)
{
int i; //控制循环
FILE *fp ; //定义文件指针
if(stu[num-1].stuNo!=0)
{
if((fp = fopen("E:\\student.txt","wt")) == NULL) //如果文件没有翻开,提示错误并退出
{
printf("\n\t文件没有翻开!程序完毕!");
getchar(); //等待用户观察
exit(0); //完毕整个程序
}
else
{
for(i=0; i<num; i++)//将数据依次写入文件
{
fprintf(fp,"\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
getchar();
printf("\n\t 已将学生信息保存在了D盘根目录下的student.txt文件中。\n");
}
}
else
{
printf("\n\t 没有学生信息。");
}
getchar();
fclose(fp);
}
/*函数功能:读取文件数据*/
void read(struct Student *stu,int num)
{
int i;
FILE * fp ;
if(stu[num-1].stuNo!=0)
{
if((fp = fopen("E:\\student.txt","rt")) == NULL)
{
printf("数据读取失败!\n");
exit(0);
}
else
{
for(i=0; i<num; i++)
{
//从文件中读出数据
fscanf(fp,"\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",&stu[i].dorNo,&stu[i].stuName,&stu[i].stuNo,&stu[i].stuSex,&stu[i].dept,&stu[i].major,&stu[i].tel);
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
}
}
else
{
printf("\n\t 没有学生信息。");
}
getchar();
getchar();
fclose(fp);
}
//修改信息
void modify(struct Student *stu,int num)
{
int m;
int i;
char ch;
system("cls");
printf("请输入你想修改学生的学号:");
scanf("%d",&m);
for(i=0;i<num;i++)
{
if(m==stu[i].stuNo)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
printf("\n您确认修改该学生信息吗?<y/n>:");
ch=getchar();
ch=getchar();
if(ch!='N'&&ch!='n')
{
printf("\n输入该学生的宿舍号:");
scanf("%d",&stu[i].dorNo) ;
printf("\nXX:");
scanf("%s",&stu[i].stuName);
printf("\n学号:");
scanf("%d",&stu[i].stuNo);
printf("\n性别:");
scanf("%s",&stu[i].stuSex);
printf("\n系别:");
scanf("%s",&stu[i].dept);
printf("\n专业:");
scanf("%s",&stu[i].major);
printf("\n:");
scanf("%d",&stu[i].tel);
write(stu,num);
system("cls");
printf(" \n\t 修改成功!!!\n\n");
output(stu,num);
}
else
{
printf("\n\t 无法修改信息!!!\n");
//break;
}
}
else
{
continue;
}
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
//删除相关学生信息
void del(struct Student *stu,int num)
{
int no;
int i;
char ch;
int j;
printf("\n请输入您想删除的学生学号:");
scanf("%d",&no);
for(i=0;i<num;i++)
{
if(no==stu[i].stuNo)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
printf("\n您确认删除该学生信息?<y/n>:");
ch=getchar();
ch=getchar();
if(ch!='n'&&ch!='N') //实现删除学生信息
{
for(j=i;j<=num-1;j++)
{
*(stu+j)=*(stu+j+1);
}
num--;
printf("\n\t 已成功删除该学生信息!!!\n");
write(stu,num);
output(stu,num);
}
else
{
printf("\n \t 无法删除!!!\n");
}
}
else
{
continue;
}
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
//添加学生信息
void add(struct Student *stu,int num)
{
int no;
int i;
printf("\n \t 请输入你想添加的学生人数:");
scanf("%d",&no);
if((stu[num-1].stuNo)!=0)
{
stu=(struct Student *)realloc(stu,num+no);
for(i=num;i<num+no;i++)
{
*(stu+num+no)=*(stu+num);
printf("\n输入第%d个学生的宿舍号:",i+1);
scanf("%d",&stu[i].dorNo) ;
printf("\nXX:");
scanf("%s",&stu[i].stuName);
printf("\n学号:");
scanf("%d",&stu[i].stuNo);
printf("\n性别:");
scanf("%s",&stu[i].stuSex);
printf("\n系别:");
scanf("%s",&stu[i].dept);
printf("\n专业:");
scanf("%s",&stu[i].major);
printf("\n:");
scanf("%d",&stu[i].tel);
}
num=num+no;
for(i=0;i<num;i++)
{
printf("\n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
//write(stu,num);
}
else
{
printf("\n\t 无法添加学生信息。。。\n");
}
printf("\n 请按任意键返回.......");
getchar();
getchar();
}
//打印学生信息
void output(struct Student *stu,int num)
{
int i;
system("cls");
if(stu[num-1].stuNo!=0)
{
printf(" \t \n\n更新学生信息如下:");
for(i=0;i<num;i++)
{
printf(" \t \n宿舍号: %d\nXX: %s\n学号: %d\n性别: %s\n系别: %s\n专业:%s\n: %d\n",stu[i].dorNo,stu[i].stuName,stu[i].stuNo,stu[i].stuSex,stu[i].dept,stu[i].major,stu[i].tel);
}
}
else
{
printf("\n没有学生信息.");
}
}
//程序完毕
教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
. .word.zl.
展开阅读全文