VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1307|回复: 0

[交流] C语言学生成绩管理系统

[复制链接]
01_avatar_middle
最佳答案
0 
在线会员 发表于 2021-3-17 14:28:43 | 显示全部楼层 |阅读模式
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define M 100
#define N 1000
//定义一个学生的信息
typedef struct _Student
{
        char name[20];  //姓名
        int studid;//学号
        int math;       //数学成绩
        int english;    //英语成绩
        int c;          //C语言成绩
        int pe;         //体育成绩
        int total;      //总成绩
}Student;
//定义一个节点
typedef struct _Node
{
   Student stu;//学生
   struct _Node* pNext;
}Node;
Node*g_pHead=NULL;             //头结点
char password[20]="4396";            //管理员密码
void Menu();//声明菜单界面函数
void Input();//声明成绩录入函数
void Print();//声明成绩显示函数
void Save();//声明成绩保存函数
void Order();//声明成绩排序函数
void Modify();//声明成绩修改函数
void Sta();//声明成绩统计函数
int main(){
        int a;
        while(1){  //while循环使程序持续运行
        Menu();
        scanf("%d",&a);
        switch(a)//**用户进行选择**//
{
case 1:
        Input(); //成绩录入
        break;
case 2:
        Print();//成绩显示
        break;
case 3:
        Save();//成绩保存
        break;
case 4:
        Order();//成绩排序
        break;
case 5:
        Modify();//成绩修改
        break;
case 6:
        printf("成绩统计\n");
        break;
case 7:
        printf("您已成功退出系统,欢迎下次使用!\n");
        return 0;
default:
        printf("无效选择,请重新输入\n");
        break;
}
}       
        return 0;
}
void Menu()//菜单界面函数
{       
        printf("\t\t\t欢迎使用学生班级成绩管理系统!\n");
        printf("\t\t=============================================\n");
        printf("\t\t==\t          主菜单                   ==\n");
        printf("\t\t=============================================\n");
        printf("\t\t==\t\t1.成绩录入                 ==\n");
        printf("\t\t==\t\t2.成绩显示                 ==\n");
        printf("\t\t==\t\t3.成绩保存                 ==\n");
        printf("\t\t==\t\t4.成绩排序                 ==\n");
        printf("\t\t==\t\t5.成绩修改                 ==\n");
        printf("\t\t==\t\t6.成绩统计                 ==\n");
        printf("\t\t==\t\t7.系统退出                 ==\n");
        printf("\t\t=============================================\n");
        printf("\t\t===========请选择相应的功能列表==============\n");
   
}
void Input()//成绩录入函数
{
        Node* pNewNode =(Node*)malloc(sizeof(Node));//创建一个新节点
        pNewNode->pNext=NULL;
        if(g_pHead==NULL)
        {
                g_pHead=pNewNode;
        }
        else
        {
                pNewNode->pNext=g_pHead;
                g_pHead=pNewNode;
        }
        printf("请输入学生的姓名:\n");
        scanf("%s",pNewNode->stu.name);
        printf("请输入学生的学号:\n");
        scanf("%d",&pNewNode->stu.studid);
        printf("请输入学生的数学成绩:\n");
        scanf("%d",&pNewNode->stu.math);
        printf("请输入学生的英语成绩:\n");
        scanf("%d",&pNewNode->stu.english);
        printf("请输入学生的C语言成绩:\n");
        scanf("%d",&pNewNode->stu.c);
        printf("请输入学生的体育成绩:\n");
        scanf("%d",&pNewNode->stu.pe);
pNewNode->stu.total=pNewNode->stu.math+pNewNode->stu.english+pNewNode->stu.c+pNewNode->stu.pe; //总成绩
        printf("学生成绩录入成功!\n");
        system("pause");      //暂停执行
        system("cls");        //清屏
       
       
       
       
       
}
void Print()//成绩显示函数
{
        system("cls");
        printf("                     学生成绩表                         \n");
        printf("========================================================\n");
        printf("姓名\t学号\t数学\t英语\tC语言\t  体育\t  总成绩\n");
        //遍历链表,一次打印出学生的成绩
        Node* p=g_pHead;
        while(p!=NULL)
        {
               
                printf("%s      %d    %d    %d    %d     %d    %d\n",
                p->stu.name,p->stu.studid,p->stu.math,p->stu.english,p->stu.c,p->stu.pe,p->stu.total);
                p=p->pNext;//指向下一个,少了这个会无限循环
         }
        system("pause");
}
void Save()//成绩保存函数
{   //打开文件
        FILE* fp=fopen("StuInformation.data","w");
        if(fp==NULL)
        {
                printf("文件打开失败.\n");
                return;
        }
        //再次遍历链表,保存学生的成绩
        Node* p=g_pHead;
        while(p!=NULL)
        {
          fwrite(&p->stu,1,sizeof(Student),fp);
          p=p->pNext;
        }
        //关闭文件
        fclose(fp);
        printf("\n学生成绩保存成功!");
    system("cls");
        system("fause");//'fause' 不是内部或外部命令,也不是可运行的程序或批处理文件??       
}
void Order()//成绩排序函数
{     
    Node* p=g_pHead;       
    Node*i,*j;
        i=p;
        j=(Node *)malloc(sizeof(Node));
        j->stu.total=p->stu.total;
        while(i->pNext!=NULL)
        {
                if(i->pNext->stu.total<j->pNext->stu.total)
                break;
                i=i->pNext;
         }
         j->pNext=i->pNext;
         i->pNext=j;
        while(p!=NULL){
                printf("%d\n",p->stu.total);
                p=p->pNext;
        }
}
       

  void Modify()//成绩修改函数
  {
          int studid,c;
          char d[20];
          printf("请输入管理员密码:");
          scanf("%s",d);
          if(strcmp(password,d)==0)
          {
                  printf("管理员登陆成功.\n");
                  printf("请输入学生的学号:\n");

          scanf("%d",&studid);
          Node* p=g_pHead;
          while(p!=NULL)
          {
                  if(p->stu.studid==studid)
                  {
                          printf("请输入要修改成绩的科目:1.数学  2.英语  3.C语言  4.体育\n");
                          scanf("%d",&c);
                          printf("请输入你要改的分数:\n");
                          switch(c)
                          {
                                  case 1:
                                scanf("%d",&p->stu.math);
                                break;
                                case 2:
                                scanf("%d",&p->stu.english);
                                break;                       
                                case 3:
                                scanf("%d",&p->stu.c);
                                break;                                                               
                                case 4:
                                scanf("%d",&p->stu.math);
                                break;                       
                          }
                          system("cls");
                          printf("成绩修改成功\n");
                          system("pause");
                          break;


                         
                         
                  }
                  p=p->pNext;
                 
          }
          if(p==NULL)
          {
                  printf("没有找到该学生的信息.\n");
                  system("pause");
                system("cls");
          }
         
          }
        while(strcmp(password,d)!=0)
          {
                  system("cls");
            printf("密码错误,返回主菜单\n");
            system("pause");
            break;

       
}
         
   }
这个成绩排序函数自己写出来排完序后再次查看学生信息会出现乱码,求大佬帮忙改一下可以按要求输出单科成绩排序(本人刚入门C语言,真的找不出原因了)。
课设题目要求.jpg




上一篇:请大神们看看这个WinMain无法重载是什么情况
下一篇:c++的学习之路
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-6-10 06:40

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表