qq_45841829 2019-12-29 16:03 采纳率: 0%
浏览 173

用C语言编写简单学生学籍管理系统。有一段已经定义好的函数,求大佬帮忙编写完整。在线急等。求各位大佬帮帮忙,重谢!!

#include <stdio.h>
#include <string.h> 
#include <stdlib.h> 
#include <conio.h> 
typedef struct 
{
    int Id; //学号
    char name[10]; //姓名
    char sex[2]; //性别
    int room; //宿舍号
    int tel; //电话号码
} StudentInfo; //定义学生信息的结构体类型
    typedef struct 
    {
      int Id;
      char courseNo[10]; //课程编号
      char courseName[20];//课程名
      double a; // 课程学分
      double b; // 平时成绩
      double c; // 实验成绩
      double d; // 卷面成绩
      double e; // 综合成绩
      double f; // 实际学分
    } MarkInfo; //定义课程信息的结构体类型
void ReadFile(); //读取文件
void DisplayMainMenu(); //显示主菜单
void DataInput(); //数据录入
void DataQuery(); //数据查询
void DataDelete(); //数据删除
void DataSort(); //数据排序
void QueryById(int ); //按学号查询
void QueryByRoom(int ); //按宿舍查询
void QueryMark(int ); //按成绩查询
void sort1(); //按综合成绩排序
void sort2(); //按实得学分排序
void markput(); //成绩输出
StudentInfo si[30]; // 学生信息结构数组
MarkInfo mi[150]; // 学生成绩结构数组
int sp=0; // 学生信息结构数组中学生数
int mp=0; // 学生成绩结构数组中成绩数
void ReadFile( )//读取文件
{
   FILE *fp;
   if((fp = fopen("A.txt","r"))==NULL)
       printf("cant open the file\n");
   while (!feof(fp))
   {
      fscanf(fp,"%d%s%s%d%d",&si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel);
      sp++;
   }
    fclose (fp);
    fp = fopen("B.txt","r");
     while (!feof(fp))
     {
        fscanf(fp,"%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);
        if (mi[mp].c == -1)
           mi[mp].e = 0.3*(mi[mp].b/1.0)+0.7*(mi[mp].d/1.0);
        else
           mi[mp].e = 0.15*(mi[mp].b/1.0)+0.15*(mi[mp].c/1.0)+0.7*(mi[mp].d/1.0);
        if(mi[mp].e >= 90. ) 
           mi[mp].f = mi[mp].a;
        else if ( mi [mp].e >= 80. )
           mi[mp].f = mi[mp].a *0.8;
        else if ( mi[mp].e >= 70. )
          mi[mp].f = mi[mp].a *0.75;
        else if ( mi[mp].e >= 60. )
          mi[mp].f = mi[mp].a *0.6;
         else 
             mi[mp].f = 0;
           mp++;
      }
    fclose(fp);
}
void DisplayMainMenu() //显示主菜单
{
     printf ("\n 1) 数据录入 \n 2) 数据查询 \n 3) 数据删除 \n 4) 数据排序 \n 5) 程序结束\n ");
}

void DataInput()//数据查询
{
    FILE *fp;
    int i;
    printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");
    while(1)
    {
        scanf("%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);
        if(mi[mp].Id==-1)
            break;
        if (mi[mp].c == -1)
           mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;
        else
           mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
        if ( mi[mp].e >= 90. )
            mi[mp].f = mi[mp].a;
        else if ( mi [mp].e >= 80. )
           mi[mp].f = mi[mp].a *0.8;
        else if ( mi[mp].e >= 70. )
           mi[mp].f = mi[mp].a *0.75;
        else if ( mi[mp].e >= 60. )
           mi[mp].f = mi[mp].a *0.6;
        else mi[mp].f = 0;
           mp++;
    }
    fp = fopen("B.txt","r+");
    for(i=0;i<mp;i++)
    {
       fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c, &mi[i].d);
       fclose(fp);
    }
}
void DataQuery()//数据查询
{
    int x,y,z;
    printf("\n 1) 学生基本情况查询\n 2) 成绩查询\n");//--------------------------选择查询内容
    scanf("%d",&x);
    if (x == 1) // 查询学生信息
    {
       printf ("1) 按学号查询 2) 按宿舍查询\n");//-------------------------------选择查询方式
        scanf("%d",&y);
        if (y == 1 )
        {
           printf ("输入学号\n");//-----------------------------------------------按学生学号查询
           scanf ("%d",&z);
            QueryById(z);
        }
         if (y == 2)
         {
         }
          if ( x ==2) // 查询成绩信息---------------------------------------查询学生成绩(输入学号)
          {
             printf ("输入学号\n");
             scanf ("%d",&y);
              QueryMark(y);
          }
    }
}
void DataDelete()//数据删除
{
   FILE *fp;
   int x;
   int i=0;
   int k,d;
   printf( "输入学号\n");
   scanf( "%d",&x);
   while( si[i].Id != x) i++;
   if (i<sp-1)
   {
       for ( k=i; k<sp-1; k++)
       {
           si[k] = si[k+1];
       }
   }
   if ( i<sp) 
       sp--;
       d = 0;
   for (k=0;k<mp;k++)
   {
       if ( mi[k].Id == x ) 
           d++;
       else mi[k-d] = mi[k];
   }
    mp = mp - d;
    fp = fopen("D:B.txt","r+");
    for(i=0;i<mp;i++)
      fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c, &mi[i].d);
}
void sort1()
{
    int i,j;
    MarkInfo t;
    for (i=mp-1;i>=1;i--)
    {
       for (j=0;j<i;j++)
       {
          if (mi[j].e>mi[j+1].e)
          {
             t=mi[j];
             mi[j] = mi[j+1];
             mi[j+1] = t;
          }
       }
    }
   markput();
}


这段函数是定义好的,求大佬帮帮忙编写完!
要求:使用下面的数据,用C语言设计一个简单的学籍管理系统,实现出最基本的功能。
学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成:
学号 姓名 性别 宿舍号码 电话号码
01 张成成 男 501 87732111
02 李成华 女 101 87723112
03 王成凤 女 101 87723112
04 张明明 男 502 87734333
05 陈东 男 501 87732111
06 李果 男 502 87734333
07 张园园 女 102 87756122
… …. .. … ………..
学生成绩基本信息文件(B.TXT)及其内容:
学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分
01 A01 大学物理 3 66 78 82

02 B03 高等数学 4 78 -1 90
01 B03 高等数学 4 45 -1 88
02 C01 VF 3 65 76 66
… …. ………. .. .. …
(一) 功能要求及说明:
(1) 数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。
综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% .
实得学分的计算: 采用等级学分制.
综合成绩在90-100之间 ,应得学分=学分*100%

综合成绩在80-90之间 ,应得学分=学分*80%
综合成绩在70-80之间 ,应得学分=学分*75%

综合成绩在60-70之间 ,应得学分=学分*60%
综合成绩在60以下 ,应得学分=学分*0%
(2)查询功能:分为学生基本情况查询和成绩查询两种
A:学生基本情况查询:
A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
B:成绩查询:
B1:输入一个学号时,查询出此生的所有课程情况,格式如下:
学 号:xx 姓 名:xxxxx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
… … … … ……… … …

共修:xx科,实得总学分为: xxx
(3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
(4 ) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R