fedsfhu 2019-12-30 15:42 采纳率: 0%
浏览 580

想在这里面添加一个增加学生信息的功能

#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("请输入正确的值"); 
    }   
}

}
帮忙可有偿

  • 写回答

1条回答 默认 最新

  • 高诗琴妈妈 2022-05-03 12:45
    关注

    高诗琴

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿