季淳卿 发表于 2021-4-25 22:00:27

C语言函数调用之后输出不了信息


// 目前我做了第一个“日常考情”的部分 不知道为什么函数调用之后 “ 全部学生考勤查找 ”和 “ 单个学生考勤查找 ” 都不能输出自己输入的信息

// 之前我是能输出信息 但是我如果我第一次输入玩“日常考情”后 再选择“继续添加学生考情”输入的信息(也就是第二次输入)在“日常考情” 它会是替换掉前面所有输入的信息

// 只会输出最新一次输入的数据

//各位大佬求解求解做的一个学生管理的项目 有很多地方都不是搞不太清楚

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100

struct xueshengkaoqin
{
        char kc;/*   课程    */       
        char name;   /*   姓名    */       
    int id;         /*   学号ID*/
        char c;         
} xskq; /*   学生考勤    */

void tou();      /*   头部    */
void kaoqin();   /* 日常考勤*/
//void kqxh();   /* 考勤循环*/
void czlx();    /* 查找学生类型 单个或者全部*/
void kqcz();    /* 单个学生考勤查找*/
void qbkqcz();/* 全部学生考勤查找*/
void ckkc();    /* 查看考情*/
void jiuqin();   /* 就寝记录*/
void weisheng(); /* 日常卫生*/
void daode();    /* 道德品质*/
void biaoxian(); /* 课堂表现*/
void zhiye();    /* 作业完成*/
void zhoukao();/*   周考    */
void yuekao();   /*   月考    */
void xiangmu();/* 课程项目*/
void zongchengji();/*课程总成绩 */
void baogao();   /* 打印报告*/
void shezhi();/* 系统设置*/

int main()

{       
        tou();
}

void tou()

{       

        int n;
        printf("\n");
        printf("\n");
        printf("\n");
        printf("****************************欢迎来到学生管理系统***************************\n");
        printf("\n");
        printf("\t\t\t      请输入所需操作\n");
        printf("\n");
        printf("\t\t\t      1.日常考勤\n");
        printf("\t\t\t      2.就寝记录\n");
        printf("\t\t\t      3.日常卫生\n");
        printf("\t\t\t      4.道德品质\n");
        printf("\t\t\t      5.课堂表现\n");
        printf("\t\t\t      6.作业完成\n");
        printf("\t\t\t      7.周考\n");
        printf("\t\t\t      8.月考\n");
        printf("\t\t\t      9.课程项目\n");
        printf("\t\t\t      10.课程总成绩\n");
        printf("\t\t\t      11.打印报告\n");
        printf("\t\t\t      12.系统设置\n");
        printf("\n");
        printf("***************************************************************************\n");
        printf("\n");
       
    scanf("%d",&n);   
    printf("\n");
        switch(n)       
        {
        case 1 :
          kaoqin();
                break;
//        case 12:
               
        default:
          printf("请重新输入选择(1-12)\n");
          tou();
          break;
        }
       
}

void kaoqin() /* 日常考勤*/

{       
    char c;
    int i=1;
    printf("\n");       
        printf("**************************    请输入日常考勤    **************************\n");
       printf("\n");
        printf("\t       考勤违规情况(迟到、早退、旷课、请假缺课)\n");
       printf("\n");
        printf("   请管理老师(学生科、班主任老师)在每天5:00下班前记载好当天情况\n");
        printf("\n");
        do
        {
                printf("请输入学生名字\n");
                  scanf("%s",xskq.name);
       
                  printf("请输入学生4位数的学号\n");
                  scanf("%d",&xskq.id);
                 
                  for(int j=1;j<10;j++)
                  {
                          printf("请输入第%d节课\n",j);
                    scanf("%s",&xskq.kc);
                  }

      printf("是否继续添加学生考勤(y或n)\n");
                  scanf("%s",&c);       
                 
//                  i++;       
       }while(c=='y');
       
      ckkc();/* 查看考情*/
}






//void kqxh() /*考勤循环*/
// {
//         char c;
//         for(int i=0;i<N;i++)
//         {
//                 printf("是否继续添加学生考勤(y或n)\n");
//                  scanf("%s",&c);
//                  if(c=='y')
//                  {
//                          kaoqin();/* 日常考勤*/
//                }
//                else if(c=='n')
//                {
//                            ckkc();/* 查看考情*/
//                }
//                else if(c!='y' || c!='n')
//                {
//                            printf("\n");
//                            printf("温馨提示输入错误 请重新输入\n");
//                }
//        
//        }
// }   

void ckkc()/* 查看考情*/
{
        char z;
        int j;
        for(j=0;j<N;j++)
        {
               printf("\n");
                  printf("是否需要查看学生的考勤情况(y或n)\n");
                  fflush(stdin);
                  scanf("%c",&z);
               if(z=='y')
              {
                  czlx();/* 查找学生类型 单个或者全部*/
                  }
                  else if(z=='n')
                  {
                            tou(); /* 返回头部*/
                            
                  }
                  else if(z!='y' || z!='n')
                  {
                            printf("\n");
                            printf("温馨提示输入错误 请重新输入\n");
                            printf("\n");
                      ckkc();
                  }
       
        }
}


void czlx()/* 查找学生类型 单个或者全部*/
{
        char z=0;
        int j;
        for(j=0;j<N;j++)
        {
                printf("\n查找单个学生请输入(y)查找所有学生请输入(s)\n");
          fflush(stdin);
          scanf("%c",&z);
          if(z=='y')
          {
                  kqcz(); /*单个学生考勤查找*/        
                }
                else if(z=='s')
                {
                        qbkqcz();/* 全部学生考勤查找*/
                }
                else if(z!='y' || z!='s')
                {
                        printf("\n");
                            printf("温馨提示输入错误 请重新输入\n");
                            printf("\n");
                      czlx();
                }
        }
               
}

void qbkqcz()/* 全部学生考勤查找*/
{
      printf("\n");
      printf("||   名字||   学号||   第一节||   第二节   ||   第三节   ||   第四节   ||   第五节   ||   第六节   ||   第七节||   第八节    ||    第九节   ||   第十节   ||\n");
      printf("\n");
      int j;
          for(int i=0;i<10;i++)
                {
                       
                        printf
                        ("    %-14s %-14d %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s\n",
                        xskq.name,xskq.id,xskq.kc,xskq.kc,xskq.kc,xskq.kc,
                        xskq.kc,xskq.kc,xskq.kc,xskq.kc,xskq.kc,xskq.kc,
                        xskq.kc ) ;
                        printf("\n");
                        tou();
                }
}


void kqcz()//单个学生考勤查找
{
//        int z;
        char sname;
        printf("\n");
        printf("请输入您要查找的学生\n");
        printf("\n");
        fflush(stdin);
        gets(sname);
        printf("\n");
        for(int i=0;i<10;i++)
        {                                       
                if(strcmp(sname,xskq.name)==0)
                {       
                        printf("\n");
                        printf("||    名字   ||    学号   ||    第一节   ||    第二节    ||    第三节    ||    第四节    ||    第五节    ||    第六节    ||    第七节   ||    第八节   ||   第九节    ||    第十节    ||\n");
                printf("\n");
                        printf
                        (               
                        "%-14s %d %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s\n",
                        xskq.name,xskq.id,xskq.kc,xskq.kc,xskq.kc,xskq.kc,
                        xskq.kc,xskq.kc,xskq.kc,xskq.kc,xskq.kc,xskq.kc,
                        xskq.kc
                        );               
                  tou();
          }
          else
                {
                        printf("抱歉没有查找到学生信息 请重新查找\n");
//                        printf("\n");
                        kqcz();
                }
   }
}







yuxijian2020 发表于 2021-4-26 08:47:13

数据覆盖了呗,你这个设计的时候稍微有点儿问题
不过你都写这么多了,重写你指定不愿意
那你就加个全局变量,记录已经录入了多少个人的信息
然后每次进入录入功能的时候,都从全局变量这个位置开始录入
而不是每次都初始化一个 i ,然后从头开始录入

季淳卿 发表于 2021-4-29 19:35:20

yuxijian2020 发表于 2021-4-26 08:47
数据覆盖了呗,你这个设计的时候稍微有点儿问题
不过你都写这么多了,重写你指定不愿意
那你就加个全局变 ...

好的 非常感谢哈 已经解决了{:5_109:}
页: [1]
查看完整版本: C语言函数调用之后输出不了信息