MDZhou_ 2022-06-23 23:25 采纳率: 100%
浏览 89
已结题

删除程序那块不知道出了什么问题


#include<stdio.h>​
#include<stdlib.h>​
#include<string.h>//头文件
 
#define LEN 20​​//学号和姓名最大字符数,20
#define N 50​​//最大的学生人数
 
int M = 0;//当前已经有的学生数量
 
//函数声明
 
void insert();  //录入学生信息
void modify();  //修改学生信息
void search();  //查询学生信息
void menu();    //主菜单函数
void save();    //保存学生信息
void jiguanbiao();  //输出学生籍贯信息
void xueji();   //查询学生学籍变化信息
void delet();   //删除学生信息
void help();    //帮助提示
 
//结构体保存学生信息
struct student{
  long int Id;  //学号
   char Name[LEN+1];    //姓名
   char Sex[LEN+1];    //性别
   int  Age;     //年龄
   char BirthPlace[LEN+1];    //籍贯
   char YuanXi[LEN+1];          //院系
   char ZhuanYe[LEN+1];        //专业
   int  BanJi;      //班级
   char xueji[LEN+1];//学籍变化信息
 
}stu[N];
 
//主函数
int main()
{
​
​while (1)
​{
​​menu();
​}
​system("pause");
​return 0;
 
}
 
 
void menu()//菜单函数
{
 
​int num;
​printf("\n");
​printf("——————————————————————————\n");
​printf("*************欢迎使用学生信息管理系统***************\n");
​printf("*                                                  *\n");
​printf("********************系统功能菜单********************\n");
​printf("*                                                  *\n");
​printf("*                 0.使用帮助                       *\n");
​printf("*                 1.添加学生信息                   *\n");
​printf("*                 2.修改学生信息                   *\n");
​printf("*                 3.查找学生信息                   *\n");
​printf("*                 4.输出学生籍贯表                 *\n");
​printf("*                 5.保存信息到文件                 *\n");
​printf("*                 6.查看学生学籍变化               *\n");
​printf("*                 7.删除学生信息                   *\n");
​printf("*                 8.退出程序                       *\n");
​printf("——————————————————————————\n");
​printf("请选择菜单编号:");
​scanf("%d", &num);
​switch (num)
​{
       case 0:
           help();
           break;
       case 1:
           printf("Input student number(M<=50):\n");
​​​scanf("%d", &M);
​​​insert();
           break;
       case 2:
           modify();
           break;
       case 3:
           search();
           break;
       case 4:
           jiguanbiao();
           break;
       case 5:
           save();
           break;
       case 6:
           xueji();
           break;
​​case 7:
           delet();
           break;
       case 8:
           printf("退出程序成功!\n");
           exit(0);
       default:
           printf("请在0-8之间选择\n");
           system("pause");//提示完成之后显示按任意键继续
​}
 
}
void help()
{
   printf("\n");
​printf("--------------------------\n");
​printf("*****************欢迎使用系统帮助*******************\n");
​printf("--------------------------\n");
​printf("----1.每次使用前请先从文件读入数据! ------\n");
​printf("----2.初次进入系统后,请先选择增加学生信息!---\n");
​printf("----3.按照菜单提示键入数字代号! --------\n");
​printf("----4.在进行插入,修改和删除操作后,切记保存!--\n");
​printf("********************感谢您的使用********************\n");
​printf("--------------------------\n");
   system("pause");
}
 
void insert()//添加学生信息
​{​int i;
​​for(i=1;i<=M;i++)
​​{
​​​printf("请输入第%d个学生的学号:",i);
​​​scanf("%ld",&stu[i].Id);
​​​printf("请输入第%d个学生的姓名:",i);
​​​scanf("%s",&stu[i].Name);
​​​printf("请输入第%d个学生的性别:",i);
​​​scanf("%s",&stu[i].Sex);
​​​printf("请输入第%d个学生的年龄:",i);
​​​scanf("%d",&stu[i].Age);
​​​printf("请输入第%d个学生的籍贯:",i);
​​​scanf("%s",&stu[i].BirthPlace);
​​​printf("请输入第%d个学生的学院:",i);
​​​scanf("%s",&stu[i].YuanXi);
​​​printf("请输入第%d个学生的专业:",i);
​​​scanf("%s",&stu[i].ZhuanYe);
​​​printf("请输入第%d个学生的班级:",i);
​​​scanf("%d",&stu[i].BanJi);
​​​printf("请输入第%d个学生的学籍(如入学、转专业、退学、降级、休学、毕业):",i);
​​​scanf("%s",&stu[i].xueji);
​​}
​​printf("学生信息添加完毕!请立即保存数据信息到文件!");
​​
​}
void modify()//修改学生信息
​{
​​
​int i, item;
​long int a;
​printf("请输入要修改学生的学号:\n");
​scanf("%ld",&a);
​for (i=1; i<=M; i++)
​{
​​if (stu[i].Id==a)
​​{
​​​printf("1.修改名字:\n");
​​​printf("2.修改性别:\n");
​​​printf("3.修改年龄:\n");
​​​printf("4.修改籍贯:\n");
​​​printf("5.修改学院:\n");
​​​printf("6.修改专业:\n");
​​​printf("7.修改班级:\n");
​​​printf("8.修改学籍\n");
​​​printf("0.End of program!\n");
​​​while (1)
​​​{
​​​​printf("please choose:");
​​​​scanf("%d", &item);
​​​​switch (item)
​​​​{
​​​​case 1:
​​​​​printf("Please input new name:\n");
​​​​​scanf("%s", &stu[i].Name);
​​​​​break;
​​​​case 2:
​​​​​printf("Please input sex:\n ");
​​​​​scanf("%s", &stu[i].Sex);
​​​​​break;
​​​​case 3:
​​​​​printf("Please input new age:\n");
​​​​​scanf("%d", &stu[i].Age);
​​​​​break;
​​​​case 4:
​​​​​printf("Please input BirthPlace:\n");
​​​​​scanf("%s", &stu[i].BirthPlace);
​​​​​break;
​​​​case 5:
​​​​​printf("Please input new yuanxi:\n");
​​​​​scanf("%s", &stu[i].YuanXi);
​​​​​break;
​​​​case 6:
​​​​​printf("Please input new zhuanye:\n");
​​​​​scanf("%s", &stu[i].ZhuanYe);
​​​​​break;
​​​​case 7:
​​​​​printf("Please input new banji:\n ");
​​​​​scanf("%d", &stu[i].BanJi);
​​​​​break;
​​​​case 8:
​​​​​printf("Please input new xueji:\n");
​​​​​scanf("%s", &stu[i].xueji);
​​​​​break;
​​​​default: printf("Input error!\n");
​​​​}
​​​​if (item == 0)
​​​system("pause");
​​​​break;
​​​}
​​}
​}
 
}
void search()  //查找已知学号的学生信息
{
​long int b,term=-1;
​int i;
   printf("请输入要查找学生的学号:");
​scanf("%ld",&b);
​for (i=1; i<=M; i++)
​{
​​if (stu[i].Id==b)
​​{
​​​
​​​printf("学号:%ld  姓名:%s  性别:%s  年龄:%d  籍贯:%s  学院:%s  专业:%s  班级:%d  学籍:%s  \n",stu[i].Id,stu[i].Name,stu[i].Sex,stu[i].Age,stu[i].BirthPlace,stu[i].YuanXi,stu[i].ZhuanYe,stu[i].BanJi,stu[i].xueji);
​​​term=-2;
​​}
​}
​if(term!=-2)
​{
​​printf("Not found!\n");
​}
​
}
void jiguanbiao()//按学号和专业输出学生籍贯表
​{
​int i;
 
​FILE *fp;
​fp=fopen("student.txt","r");
​printf("********************学生籍贯表*********************\n");
​printf("学号      姓名       籍贯\n");
​for(i=1;i<=M;i++)
​{  
​​printf("%ld        %s         %s\n",stu[i].Id,stu[i].Name,stu[i].BirthPlace);
​}
​fclose(fp);
​}
void save()//保存学生信息到文件
​{
​​int i;
​
​​FILE *fp;
​​fp=fopen("student.txt","w");//创建名为“student.txt”的记事本for(i=1;i<=M;i++)
​​{
​​​fprintf(fp,"%ld \t%s\t%s\t%d\t%s\t%s\t%s\t%d\t%s  \n",stu[i].Id,stu[i].Name,stu[i].Sex,stu[i].Age,stu[i].BirthPlace,stu[i].YuanXi,stu[i].ZhuanYe,stu[i].BanJi,stu[i].xueji);
 
​​}
​​fclose(fp);
​​printf("学生信息保存成功!");
​}
//删除学生信息函数
void delet()
{
​int i, j, flag = 0;
​long int id;
​printf("请输入要删除学生的学号:\n");
​scanf("%ld", &id);
​for (i = 0; i <M; i++){
​​if(stu[i].Id==id)
​​{
​​​flag = 1;
​​
​​​//要删除学生后面的学生往前移一位
​​​for (j = i; j < M - 1; j++)
​​​{
​​​​stu[j] = stu[j + 1];//结构体数组操作
​​
​​​}
​​​M--;
​​​break;
​​}
​}
​
   //查找失败
   if (flag == 0){
       printf("学号不存在,没有该学生信息!!!\n");
   }
   if (flag == 1){
     
       printf("请及时保存信息到文件!!!\n");
​     printf("删除成功!!!\n");
​​  M--; //删除成功,学生人数减1
​​
   }
                                                                                                                                                                                                           
}
 
 
//查询学生学籍变化信息
void xueji()  
 
​{
​​long int c,t=-1;
​​int i;
​​printf("请输入要查询学生的学号:");
​​scanf("%ld",&c);
​​for (i=1; i<=M; i++)
​​{
​​​if (c==stu[i].Id)
​​​{
​​​printf("学号:%ld  姓名:%s   学籍:%s  \n",stu[i].Id,stu[i].Name,stu[i].xueji);​​
​​​t=-2;
​​​}​
​​}
​​
​​if(t!=-2)​
​​printf("Not found!\n");
​}

删除学生信息那没有办法进行,输入学号后直接没有办法再运行下去

  • 写回答

3条回答 默认 最新

  • 天际的海浪 2022-06-23 23:51
    关注

    结构体中学号id是 long int类型, 你输入的s1 是字符串,两者不能比较
    应该 char s1[len+1] 改成 long int id;
    输入学号用
    scanf("%d", &id);
    比较用
    if (stu[i].id==id)
    删除成功后 M应该减1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月25日
  • 已采纳回答 6月24日
  • 修改了问题 6月24日
  • 赞助了问题酬金5元 6月23日
  • 展开全部

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?