学生成绩管理系统(C语言实现)

简介: 学生成绩管理系统(C语言实现)

设计并实现一个简单的学生成绩管理系统

学生成绩表信息包括学号、姓名、各科课程成绩(语文、数学、英语、政治)和总分。用带头结点的单链表管理学生成绩表,每个学生的信息依次从键盘输入,并根据需要进行插入、删除、排序、输出等操作。

一、实训环境

信息工程学院双创交流中心******电脑室开展实训,由企业老师带领我们复习C语言的基本知识,然后讲解学生成绩管理系统各个组件功能的构成部分,以及每部分的代码详解。

二、项目开发过程

1. 学生成绩管理系统主页面功能全览

1. #include<iostream>
2. #include<stdio.h>
3. #include<stdlib.h> 
4. #include<string.h>
5. using namespace std;
6. typedef struct PNode*LinkList;
7. typedef struct PNode{
8.  int stdio;
9.  char name[30];
10.   double chinese;
11.   double math;
12.   double english;
13.   double politics;
14.   double sum;
15.   PNode *next;
16. }PNode;
17. 
18. int main(){ 
19.     LinkList llist=(LinkList)malloc(sizeof(PNode));
20.     llist->next=NULL;
21.   int a,b=1;
22.   while(b){
23.     printf("\n-----------------------学生成绩管理系统-----------------------\n");
24.     printf("请选择你需要的功能:\n");
25.     printf(" 1.查找     2.插入    3.排序     4.展示     5.删除     6.退出\n");
26.     scanf("%d",&a);
27.     switch(a){
28.       case 1:printf("\n-----------------------学生成绩查找功能-----------------------\n"); check(llist);break;
29.       case 2:printf("\n-----------------------学生成绩插入功能-----------------------\n"); input(llist);break; 
30.       case 3:printf("\n-----------------------学生成绩排序功能-----------------------\n"); sortList(llist);break;
31.       case 4:printf("\n-----------------------学生成绩展示功能-----------------------\n"); display(llist);break; 
32.       case 5:printf("\n-----------------------学生成绩删除功能-----------------------\n"); deleteList(llist);break; 
33.       case 6:b = 0; break; 
34.       default:printf("输入有误!请重新输入!\n");
35.     } 
36.   }
37.   printf("\n-----------------------已退出成绩管理系统-----------------------\n"); 
38.   return 0;
39. }

2.输入学生信息,按输入顺序建立一个带头结点的单链表,直到输入学号为0结束。

1. void input(LinkList llist){
2.  printf("请输入考试的学生人数:\n");
3.  int n;scanf("%d",&n);
4.  LinkList p;
5.  for(int i=1;i<=n;i++){
6.    p=(LinkList)malloc(sizeof(PNode));
7.    printf("请输入学生学号:\n");
8.    scanf("%d",&p->stdio);
9. 
10.     printf("请输入学生姓名:\n");
11.     scanf("%s",p->name);
12. 
13.     printf("请输入学生语文成绩:\n");
14.     scanf("%lf",&p->chinese);
15. 
16.     printf("请输入学生数学成绩:\n");
17.     scanf("%lf",&p->math);
18. 
19.     printf("请输入学生英语成绩:\n");
20.     scanf("%lf",&p->english);
21. 
22.     printf("请输入学生政治成绩:\n");
23.     scanf("%lf",&p->politics);
24. 
25.     p->sum=p->chinese+p->math+p->english+p->politics;
26.     p->next=llist->next;
27.     llist->next=p;
28.   }
29.   printf("\n-----------------------学生成绩完成录入-----------------------\n");
30. }

3.输入一个学生的姓名,在链表中进行查找,如果存在,显示该生的所有信息;如果不存在,显示提示信息“查无此人”。

1. void check(LinkList llist){
2.  LinkList e=llist->next; 
3.     int f;
4.     printf("请输入查找的学号:\n");
5.     scanf("%d",&f);
6.     while(e->stdio!=f)
7.     e=e->next;
8.  if(e->stdio==f) 
9.  printf("%d\t %s%12lf %6lf %6lf %6lf %6lf\n",e->stdio,e->name,e->chinese,e->math,e->english,e->politics,e->sum);
10.   else
11.   printf("查找值不存在!\n");
12. }

4.展示链表中所输入的全部学生信息。

1. void display(LinkList llist){
2.  printf("\n-----------------------学生成绩信息展示-----------------------\n");
3.  printf("学号\t姓名\t 语文\t  数学\t  英语\t    政治    总分\n"); 
4.  LinkList p=llist->next;
5.  if(llist->next==NULL){
6.    printf("系统中无学生信息!\n");
7.  }
8.  else{
9.    while(p!=NULL){ 
10.     printf(" %d\t %s%12lf %6lf %6lf %6lf %6lf\n",p->stdio,p->name,p->chinese,p->math,p->english,p->politics,p->sum);
11.     p=p->next;} 
12.   }
13.   printf("\n-----------------------学生成绩完成展示-----------------------\n");
14. }

5. 将学生成绩按总成绩从低到高排序,并输出结果。

1. void sortList(LinkList llist){ 
2.  printf("请输入排序的依据:\n");
3.  printf("1.数学    2.语文   3.英语    4.政治    5.总分\n");
4.  int a;
5.  scanf("%d",&a);
6.  switch(a){
7.    case 1:
8.      printf("按照数学排序已完成\n");
9.      if(llist->next==NULL){
10.     printf("学生成绩无数据!"); 
11.   } else if(llist->next->next==NULL){
12.     printf("学生成绩为一个,无需排序!"); 
13.   }else{
14.     LinkList p=llist->next->next;
15.     llist->next->next=NULL;
16.     LinkList q,r;
17.     while(p!=NULL){
18.       q=llist;
19.       r=p->next;
20.       while(q->next!=NULL&&q->next->math<p->math){
21.         q=q->next;
22.       }
23.       p->next=q->next;
24.       q->next=p;
25.       p=r;
26.     }
27.   }
28.       break;
29.     case 2:
30.       printf("按照语文排序已完成\n");
31.       if(llist->next==NULL){
32.     printf("学生成绩无数据!"); 
33.   } else if(llist->next->next==NULL){
34.     printf("学生成绩为一个,无需排序!"); 
35.   }else{
36.     LinkList p=llist->next->next;
37.     llist->next->next=NULL;
38.     LinkList q,r;
39.     while(p!=NULL){
40.       q=llist;
41.       r=p->next;
42.       while(q->next!=NULL&&q->next->chinese<p->chinese){
43.         q=q->next;
44.       }
45.       p->next=q->next;
46.       q->next=p;
47.       p=r;
48.     }
49.   }
50.       break;
51.     case 3:
52.       printf("按照英语排序已完成\n");
53.       if(llist->next==NULL){
54.     printf("学生成绩无数据!"); 
55.   } else if(llist->next->next==NULL){
56.     printf("学生成绩为一个,无需排序!"); 
57.   }else{
58.     LinkList p=llist->next->next;
59.     llist->next->next=NULL;
60.     LinkList q,r;
61.     while(p!=NULL){
62.       q=llist;
63.       r=p->next;
64.       while(q->next!=NULL&&q->next->english<p->english){
65.         q=q->next;
66.       }
67.       p->next=q->next;
68.       q->next=p;
69.       p=r;
70.     }
71.   }
72.       break;
73.     case 4:
74.       printf("按照政治排序已完成\n");
75.       if(llist->next==NULL){
76.     printf("学生成绩无数据!"); 
77.   } else if(llist->next->next==NULL){
78.     printf("学生成绩为一个,无需排序!"); 
79.   }else{
80.     LinkList p=llist->next->next;
81.     llist->next->next=NULL;
82.     LinkList q,r;
83.     while(p!=NULL){
84.       q=llist;
85.       r=p->next;
86.       while(q->next!=NULL&&q->next->politics<p->politics){
87.         q=q->next;
88.       }
89.       p->next=q->next;
90.       q->next=p;
91.       p=r;
92.     }
93.   }
94.       break;
95.     case 5:
96.       printf("按照总分排序已完成\n");
97.       if(llist->next==NULL){
98.     printf("学生成绩无数据!"); 
99.   } else if(llist->next->next==NULL){
100.    printf("学生成绩为一个,无需排序!"); 
101.  }else{
102.    LinkList p=llist->next->next;
103.    llist->next->next=NULL;
104.    LinkList q,r;
105.    while(p!=NULL){
106.      q=llist;
107.      r=p->next;
108.      while(q->next!=NULL&&q->next->sum<p->sum){
109.        q=q->next;
110.      }
111.      p->next=q->next;
112.      q->next=p;
113.      p=r;
114.    }
115.  }
116.      break;
117.    default:
118.      printf("输入有误!\n"); 
119.  }
120. }

6. 输入一个学生的学号,如果链表中存在该学生信息,则将其删除。

1. void deleteList(LinkList llist){ 
2.     LinkList p=llist; 
3.     int d;
4.  printf("请输入删除的学号:\n");
5.  scanf("%d",&d);
6.     while(p!=NULL){
7.  if(p->next->stdio!=d) p=p->next;break;}
8.  if(p->next->stdio==d) p->next=p->next->next;
9.  else
10.   printf("删除值不存在!\n");  
11.   printf("\n-----------------------学生成绩完成删除-----------------------\n");
12. }

目录
相关文章
|
1月前
|
C语言
基于链表实现的链式管理系统(C语言课设)
基于链表实现的链式管理系统(C语言课设)
|
1月前
|
存储 编译器 C语言
用C语言判断并打印成绩等级
用C语言判断并打印成绩等级
用C语言判断并打印成绩等级
|
1月前
|
C语言
c语言编程练习题:7-17 成绩转换
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
64 0
|
5天前
|
机器学习/深度学习 C语言 Windows
C语言的管理系统代码
C语言学生宿舍管理系统代码
|
2天前
|
机器学习/深度学习 C语言 Windows
程序与技术分享:C语言学生宿舍管理系统代码(可运行)
程序与技术分享:C语言学生宿舍管理系统代码(可运行)
|
8天前
|
C语言
C语言---输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。
C语言---输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。
12 0
|
1月前
|
存储 C语言
C语言实现学生成绩管理系统
C语言实现学生成绩管理系统
136 2
|
1月前
|
存储 C语言 数据安全/隐私保护
C语言实现简易银行账户管理系统
C语言实现简易银行账户管理系统
144 1
|
1月前
|
存储 文件存储 C语言
《C语言程序设计》课程设计 -- 火车票票务管理系统
《C语言程序设计》课程设计 -- 火车票票务管理系统
65 1
|
1月前
|
存储 人工智能 搜索推荐
【C语言/C++】电子元器件管理系统(C源码)【独一无二】
【C语言/C++】电子元器件管理系统(C源码)【独一无二】