#include
#include
#include
//宿舍管理软件
//结构体,主题是学生,包括
struct students{
char name[10];
int id;
int dorm_id;
int building_id;
}student[5]={
{"张三",2019,01,0003},
{"李四",2020,02,0002},
{"王五",2001,03,0001},
{"马六",2003,04,0002},
{"赵七",2018,05,0001}
};
void sort_id();
void sort_name();
void sort_drom_id();
typedef struct students stuinfo;
//函数体模块
//操作功能页面
void display(){
printf("---------------------------------------\n");
printf("----------请输入要选择的值-------------\n");
printf("----------1:存储学生信息---------------\n");
printf("----------2:排序学生信息---------------\n");
printf("----------3:查找学生信息---------------\n");
printf("----------4:显示学生信息---------------\n");
}
//排序
//按照姓名
//按照学号
//按照宿舍号
void display_sort(){
printf("1:按照学号");
printf("2:按照姓名");
printf("3:按照宿舍号");
}
void sort(){
char str[5];
int i,j,m;
stuinfo temp;
//进行排序
printf("1:按照学号");
printf("2:按照姓名");
printf("3:按照宿舍号");
scanf("%d",&m);
switch(m){
case 1:{
sort_id();
break;
}
case 2:{
sort_name();
break;
}
case 3:{
sort_drom_id();
break;
}
default :printf("请输入1,2,3中的数字");
}
printf("\n 排序已经完成,请按任意键继续\n");
}
void sort_id(){
int i,j,m;
stuinfo temp;
//进行排序
for(i=0;i
for(j=0;j
if(student[j].id>student[j+1].id)
{
temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
printf("按照学号排序完成");
}
void sort_name(){
int i,j,m;
stuinfo temp;
//进行排序
for(i=0;i
for(j=0;j
if(strcmp(student[j].name,student[j+1].name)>0)
{
temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
printf("按照姓名排序完成");
}
void sort_drom_id(){
int i,j,m;
stuinfo temp;
//进行排序
for(i=0;i
for(j=0;j
if(student[j].dorm_id>student[j+1].dorm_id)
{
temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
printf("按照宿舍号排序完成");
}
//查找学生信息
int found(){
int low,high,mid,m;
low=0;
high=5-1;
printf("1:按照学号查找");
printf("2: 按照姓名查找");
printf("3: 按照宿舍号查找");
scanf("%d",&m);
switch(m){
case 1: {
sort_id();
int key; int flag=0;
printf("请输入要查找的学号");
scanf("%d",&key);
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(student[mid].id==key) //中间元素与关键字相等
{return mid;
flag=1;
}
else if(student[mid].id>key) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
if(flag==0){
return 100;
}
break;
}
case 2:{
sort_name();
char key[10];
printf("请输入要查找的姓名");int flag=0;
gets(key);
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(strcmp(student[mid].name,key)==0) //中间元素与关键字相等
{return mid;
flag=1;
}
else if(strcmp(student[mid].name,key)>0) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
if(flag==0){
return 100;
}
break;
}
case 3:{
sort_drom_id();
int key;
printf("请输入要查找的宿舍号");
scanf("%d",&key);int flag=0;
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(student[mid].dorm_id==key) //中间元素与关键字相等
{return mid;
flag=1;
}
else if(student[mid].dorm_id>key) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
if(flag==0){
return 100;
}
break;
}
}
}
int savetofile()
{
FILE *fp;
if((fp=fopen("stu_info.txt","wb+"))==NULL) //打开文件失败
{
printf("无法打开文件!\n");
printf("请按任意键继续\n");
getchar();
return 0;
}
printf("\n 存文件...\n");
fwrite(student,sizeof(stuinfo)*5,1,fp); //写入文件
fclose(fp);
printf("5条记录已经存入文件,请按任意键继续。\n"); //savedflag=0;//更新是否已保存的标记
getchar();
return 1;
}
int loadfromfile(void)
{
FILE *fp;
int i;
if((fp=fopen("stu_info.txt","rb"))==NULL) //打开文件失败
{
printf("无法打开文件!\n");
printf("请按任意键继续\n");
getchar();
return 0;
}
printf("\n 读取文件...\n");
int applicantnum=0; //重新计算员工数
while(!feof(fp)) //读取文件内容
{
fread(&student[applicantnum],sizeof(stuinfo),1,fp);
applicantnum++;
}
applicantnum--;
fclose(fp);
printf("共从文件中读入%d 条记录\n",applicantnum);
//p=records;
printf("读出的文件内容为:\n");
//showtitle(); //先显示原信息
for(i=0;i<=applicantnum;i++)
{
printf("姓名:%s 学号:%d 宿舍号:%d 楼号:%d\n",student[i].name,student[i].id,student[i].dorm_id,student[i].building_id); }
printf("请按任意键继续!\n");
getchar();
return 1;
}
//排序
//按照姓名
//按照学号
//按照宿舍号
//打印学生信息
//建立数据文件
//数据文件按照关键字(姓名,学号,宿舍号)
//按姓名查询
//按学号查询
//按宿舍号查询
void main(){
int m,n;
m=1;
int w;
while(m){
display();
scanf("%d",&n);
switch(n){
case 1:{
printf("存储c语言的文件");
int s=savetofile();
if(s=1){
printf("存储完成");
}
break;
}
case 2:{
sort();
break;
}
case 3:{
w=found();
if(w==100){
printf("没有查找到");
}else{
printf("查找出来的学生为/n");
printf("姓名:%s 学号:%d 宿舍号:%d 楼号:%d",student[w].name,student[w].id,student[w].dorm_id,student[w].building_id);
}
break;
}
case 4:{
loadfromfile();
int i;
for(i=0;i<5;i++){
// printf("姓名:%s 学号:%d 宿舍号:%d 楼号:%d",student[i].name,student[i].id,student[i].dorm_id,student[i].building_id);
}
break;
}
default:printf("请输入正确的值");
}
}
}
帮忙可有偿