C語言成績分析系統,可以實現七個功能。(使用的編譯器是 code::blocks)

  1. 主要實現對於學生信息的輸入
  2. 顯示輸入學生的信息
  3. 根據期末成績來進行排名。
  4. 查找某個學生的信息
  5. 刪除某個學生的信息
  6. 修改某個學生的信息
  7. 退出程序

七個不同的功能均用自定義函數來進行完成。對於函數的命名要起好對應的名字。以免造成混亂,分不清楚自己寫的函數應該放在哪個位置。

在主函數使用 switch-case語句來實現函數的調用功能。

一些遇到的問題

1、 在codeblocks IDE中中文会出现乱码的情况

(1) 是字体库不匹配的原因,重新选择字体库可以解决输入中文

(2) 对IDE编辑器进行环境调试。

点击Other compiler options,在空白处填写:

-finput-charset=UTF-8

-fexec-charset=GBK

2、 在进行学号输入时对int和char类型的选择

(1)考虑到学号的长短不一,对于用户而言,选择相对于自由,可以选则无符号整形(学号没有负数的可能),或者时字符型数组来进行存储,则可以解决较长的学号。

(2)在选择方面,在程序中我使用了无符号的整形来储存较长的学号,注意在使用打印printf函数时要用%lld,但是相比较而言,选择字符型数组更好。(可以设置字符型数组char num[50])。

3、 在需要不同功能的函数块可以使用新的的结构体数组来进行快速的设定,这样可以方便以后的查改。

4、 在定义数组的元素个数时,可以使用宏来定义,方便程序的维护。

  1 /*程序中默认期末成绩=平时分的百分之40+实验成绩的百分之60*/
2 #include<stdio.h>
3 #include<stdlib.h>
4 #include <string.h>
5 #include<stdbool.h>
6 #define NUM 100
7 struct Stu //定义学生结构体
8 {
9 char name[30]; //姓名
10 char gender[20]; //性别
11 long long number; //学号
12 double Uscore; //平时分数
13 double Escore; //实验成绩
14 double Fscore; //期末成绩
15 };
16
17 struct Stu Student[100]; //一共可以储存100个学生的信息
18
19 int n; //全局变量
20 int allfuction;
21
22 void Exit() //显示退出程序函数(结束)
23 {
24 system("cls");
25 printf("\n\n\n");
26 printf("\t\t\t****************************************************************\n");
27 printf("\t\t\t|| ||\n");
28 printf("\t\t\t|| Thank you to ||\n");
29 printf("\t\t\t|| use this programme ! ||\n");
30 printf("\t\t\t|| ||\n");
31 printf("\t\t\t|| ||\n");
32 printf("\t\t\t****************************************************************\n");
33 }
34
35 void Menu() //菜单
36 {
37
38 printf(" *************************Student achievement management system************************\n");
39 printf(" Please select the operation to be performed\n \n");
40 printf(" 1 : Enter the information of students you want.\n");
41 printf(" 2 : Show all students information.\n");
42 printf(" 3 : Sort students information.\n");
43 printf(" 4 : Find students information.\n");
44 printf(" 5 : Delete students information.\n");
45 printf(" 6 : Modify students information\n");
46 printf(" 7 : Exit this system.\n");
47 printf("Please enter your options: \n");
48 scanf("%d",&allfuction);
49 }
50
51 int InputStudent() //学生基本信息输入int组
52 {
53 int again;
54 int i=1;
55 while(i)
56 {
57 system("cls");
58 printf("--------------Please enter students\' information--------------\n\n\n"); //人机交互
59 printf("Please enter the score of the number %d student:\n",i); //提示用户输入
60 printf("Please enter student\'s ID:");
61 scanf("%lld",&Student[i].number); //结构体的数据输入number
62 printf("Please enter student\'s name:");
63 scanf("%s",Student[i].name); //结构体的数据输入name
64 printf("Please enter student\'s gender:");
65 scanf("%s",&Student[i].gender); //结构体的数据输入gender
66 printf("Please enter student\'s Semester work:");
67 scanf("%lf",&Student[i].Uscore); //结构体的数据输入Uscore
68 printf("Please enter student\'s Experimental results:");
69 scanf("%lf",&Student[i].Escore); //结构体的数据输入Escore
70 i++; //计数器
71 n++;
72 printf("Success!\n");
73 printf("Continue to decide whether to enter information ? 1.Continue 2.Exit\n");
74 scanf("%d",&again); //让用户决定是否继续输入
75 if(again == 2)
76 {
77 system("cls"); //清屏结束此次操作
78 break;
79 }
80
81 }
82 }
83
84 void DisplayStudent() //显示学生信息
85 {
86 int i = 0; //初始化i计数器
87 int pass = 0;
88 int n_pass = 0;
89 double percent=0.0;
90 double percent1=0.0;
91 system("cls"); //清屏实现后续操作
92 printf("--------------Display students\' information--------------\n\n\n");
93 printf("ID====name====semester work====Experimental results====Final Examination====\n\n\n");
94
95 for(i = 1;i <= n; i++)
96 {
97 Student[i].Fscore = (0.4*Student[i].Uscore) + (0.6*Student[i].Escore); //期末成绩的计算
98 printf("Student ID:%lld\nStudent name:%s\nSemester work:%.3lf\nExperimental results:%.3lf\nFinal examination:%.3lf\n\n",
99 Student[i].number,Student[i].name,Student[i].Uscore,Student[i].Escore,Student[i].Fscore); //输出学生的成绩信息
100 }
101 if(Student[i].Fscore < 60)
102 {
103 ++n_pass;
104 }
105 else
106 {
107 ++pass;
108 }
109 percent=(double)pass/(double)n;
110 percent1=(double)n_pass/(double)n;
111 printf("%d students pass the assessment. %.3lf%% of the total number of students\n",pass,percent);
112 printf("%d students not pass the assessment. %.3lf%% of the total number of students\n",n_pass,percent1);
113 }
114
115 void mysort() //根据成绩排序名次
116 {
117 struct Stu t; //新的结构体
118 system("cls");
119 printf("--------------Ranked according to final examination--------------\n\n\n");
120 for(int i = 1; i < n; i++)
121 for(int j = 1; j < n; j++)
122 if(Student[j].Fscore > Student[j-1].Fscore) //互换
123 {
124 t = Student[j];
125 Student[j] = Student[j-1];
126 Student[j-1] = t;
127 }
128 for(int i = 1; i <= n; i++) //按照成绩的大小来输出具体的信息
129 {
130 Student[i].Fscore = (0.4*Student[i].Uscore) + (0.6*Student[i].Escore);
131 printf("Student ID: %d\n",Student[i].number);
132 printf("Student name: %s\n",Student[i].name);
133 printf("Gender: %s\n",Student[i].gender);
134 printf("Semester work: %.3lf\n",Student[i].Uscore);
135 printf("Experimental results: %.3lf\n",Student[i].Escore);
136 printf("Final examination: %.3lf\n\n",Student[i].Fscore);
137 }
138 printf("\n");
139 }
140
141 void FindStudent() //根据学号查找录入学生的信息
142 {
143 int i=0; //计数器
144 long long ID; //定位学号的一个标记
145 system("cls");
146 printf("--------------Search by student\'s ID--------------\n\n\n");
147 printf("Please enter the student\'s ID: ");
148 scanf("%lld",&ID);
149 for(i=1;i<=n;i++)
150 {
151 if(ID==Student[i].number) //如果输入的学号和存入学生信息的学号相等,进入下面的程序
152 {
153 Student[i].Fscore = (0.4*Student[i].Uscore) + (0.6*Student[i].Escore);
154 printf("Student ID: %lld\n",Student[i].number);
155 printf("Student name: %s\n",Student[i].name);
156 printf("Gender: %s\n",Student[i].gender);
157 printf("Semester work: %.3lf\n",Student[i].Uscore);
158 printf("Experimental results: %.3lf\n",Student[i].Escore);
159 printf("Final examination: %.3lf\n",Student[i].Fscore);
160 }
161 }
162 }
163
164 void DeleteStudent() //删除一个学生的信息
165 {
166 long long nums; //定义一个学号的标记
167 int i=0;
168 int j=0;
169 int decide;
170 system("cls");
171 printf("\n============Delete information by student\' ID===========\n");
172 printf("Enter the student ID of the student you want to delete: ");
173 scanf("%lld",&nums);
174
175 for(i=1;i<=n;i++)
176 {
177 if(nums==Student[i].number) //输入的学号与存入的学号相等进行删除工作
178 {
179 Student[i].Fscore = (0.4*Student[i].Uscore) + (0.6*Student[i].Escore);
180 printf("ID\tname\tSemester work\tExperimental results\tFinal examination\t\n");
181 printf("%lld\t%s\t%.3lf\t%.3lf\t%.3lf\t\n",
182 Student[i].number,Student[i].name,Student[i].Uscore,Student[i].Escore,Student[i].Fscore);
183
184 printf("Confirm the deletion !(1.Yes 2.No)\n");
185 scanf("%d",&decide);
186 if(decide==1) //输入1则进行删除工作
187 {
188 for(j=i;j<=n;j++)
189 {
190 Student[j].number=Student[j+1].number;
191 strcpy(Student[j].name,Student[j+1].name);
192 Student[i].Uscore=Student[i].Uscore;
193 Student[i].Escore=Student[i].Escore;
194 Student[i].Fscore=Student[i].Fscore;
195 }
196 n--;
197 }
198 if(decide==2) //输入2则取消删除工作
199 {
200 printf("Cancel deletion.");
201 }
202 }
203 }
204 }
205
206 void ModifyStudent() //修改学生的信息
207 {
208 int i=0;
209 long long IDs;
210 system("cls");
211 printf("--------------Please enter the student\'s ID you want to modify--------------\n\n\n");
212 printf("Please enter the student\'s ID you want to modify:");
213 scanf("%lld",&IDs);
214 for(i = 1; i <= n; i++)
215 {
216 if(IDs==Student[i].number)
217 {
218 printf("Please re-enter the student's information.\n");
219 printf("ID: \n");
220 scanf("%lld",&Student[i].number);
221 printf("name: \n");
222 scanf("%s",Student[i].name);
223 printf("Semester work: \n");
224 scanf("%lf",&Student[i].Uscore);
225 printf("Experimental results: \n");
226 scanf("%lf",&Student[i].Escore);
227 printf("Final examination: \n");
228 scanf("%lf",&Student[i].Fscore);
229 printf("Successful modification !\n\n");
230 }
231 }
232 }
233
234 int main()
235 {
236 while(true)
237 {
238 Menu(); //显示菜单
239
240 switch(allfuction) //选择swtich来进行菜单的选择
241 {
242 case 1:
243 InputStudent(Student,NUM); //输入学生信息
244 break;
245
246 case 2:
247 DisplayStudent(Student,NUM); //显示学生信息
248 break;
249
250 case 3:
251 mysort(Student,NUM); //根据期末成绩排序,并展示及格和不及格的人数
252 break;
253
254 case 4:
255 FindStudent(Student,NUM); //查找某个学生的信息
256 break;
257
258 case 5:
259 DeleteStudent(Student,NUM); //删除某个学生的信息
260 break;
261
262 case 6:
263 ModifyStudent(Student,NUM); //修改某个学生的信息
264 break;
265
266 case 7: //退出整个程序
267 Exit();
268 return 0;
269 }
270 }
271 }

代碼運行結果以及功能展示

  1. 菜單

  2. 錄入信息

  3. 顯示信息

  4. 根據期末成績排名

  5. 查找某個學生的信息

  6. 刪除某個學生的信息

  7. 修改某個學生的信息

  8. 退出程序

C語言成績分析系統的更多相关文章

  1. 幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境

    1. 首先下载官方GO語言安装包: https://code.google.com/p/go/wiki/Downloads?tm=2 2. 设置 GOPATH 在任意磁盘根目录新建一个文件夹,名字随意 ...

  2. tomcat 注冊成操作系統服務

    nginx注冊成服務1.把srvany.exe和instsrv.exe拷貝到nginx安裝路徑下面.2.執行命令Command代碼instsrv Nginx D:\nginx\srvany.exe3. ...

  3. GO語言基礎教程:數據類型,變量,常量

    GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...

  4. GO語言基礎教程:Hello world!

    首先簡單地說一下GO語言的環境安裝,從 http://golang.org/dl/ 針對自己的操作系統選擇合適的安裝包,然後下載安裝即可,下載的時候注意別選錯了的操作系統,例如go1.3.1.darw ...

  5. GO語言基礎教程:序章

    首先自我介紹一下我自己,我是一個coder,目前主要從事B/S程序開發工作,懂點PHP;ASP;JSP;JS;VB;C;DELPHI;JAVA,另外知道幾個數據庫,除此之外別無所長,那麼我為何會選擇學 ...

  6. Ubuntu語言支持爲灰色修復方法

    Ubuntu語言支持爲灰色修復方法 在Ubuntu12.04中,在下不知爲何將 語言支持 中 應用到整個系統 和 添加語言 這2個按弄成了灰色,導致ibus不能輸入中文,現在唔將修復方法公告天下: 1 ...

  7. oracle系統表、數據字典介紹與日常問題診斷

    oracle系統表.數據字典介紹與日常問題診斷 數據字典是由唯讀的table和view組成的,產生於$oracle_home\rdbms\admin\catalog.sql.裡面儲存Oracle資料庫 ...

  8. 20個命令行工具監控 Linux 系統性能

    對於每個系統管理員或網路管理員來說,每天要監控和調試 Linux 系統性能問題都是非常困難的工作.我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行.為此,我們編寫了對於 L ...

  9. GO語言基礎教程:流程控制

    在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼: package main import ( "fmt" ) func main(){ var x,y int ...

  10. Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)

    he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, morgan@linux.kernel.org翻译:孙国清(Thomas Sun),thomassun@yeah.ne ...

随机推荐

  1. Linux进程间通信(二)

    信号 信号的概念 信号是Linux进程间通信的最古老的一种方式.信号是软件中断,是一种异步通信的方式.信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某个突发事件. 一旦产生信号 ...

  2. 加速乐逆向 cookies 参数

    简介 加速乐用于解决网站访问速度过慢及网站反黑客问题. 爬取使用该技术网站时需要携带特定的cookies参数(有的是__jsl_clearance_s,有的__jsl_clearance),本项目以一 ...

  3. 手把手,完整的从0搭建vite-vue3-ts项目框架:配置less+svg+pinia+vant+axios

    项目同步git:https://gitee.com/lixin_ajax/vue3-vite-ts-pinia-vant-less.git 为避免赘述,过于基础的点会直接省略或贴图,比如创建文件夹/文 ...

  4. 13.django-admin组件

    Django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点,下面通过案例进行操作 1.创建模型类 模型类如下: from django.db import models ...

  5. 随笔——安卓手机调试微信网页,x5错误页

    如果打开debugx5.qq.com提示您使用的不是x5内核 那么先打开debugmm.qq.com/?forcex5=true 再打开http://debugtbs.qq.com 将进入下面这个页面 ...

  6. Bigkey问题的解决思路与方式探索

    作者:vivo 互联网数据库团队- Du Ting 在Redis运维过程中,由于Bigkey 的存在,会影响业务程序的响应速度,严重的还会造成可用性损失,DBA也一直和业务开发方强调 Bigkey 的 ...

  7. i春秋Hello World

    打开只有一句hello world,直接查看源码,发现一个flag.xmas.js文件 试试直接访问http://106.75.72.168:9999/flag.xmas.js  http://106 ...

  8. i春秋Test

    点开是个莫名其妙的网站...看看源码, 第一排好像有点东西 最后也有点东西,所以我们直接百度海洋CMS漏洞(https://www.freebuf.com/vuls/150042.html) 所以这里 ...

  9. 【2022-11-28】Docker部署搭建Gitlab

    一.环境准备 1. 准备一台虚拟机\或者购买服务器 2. 虚拟机硬件要求 2.1 内存不得少于4G,否则启动会报502错误,可自行百度解决,将虚拟机的swap分区调整为2G大小即可 2.2 CPU2核 ...

  10. day09 常用工具类&包装类&集合——List、Set

    day09 常用工具类 java.lang.Math数值运算 基本数值运算,如初等函数.对数.平方根和三角函数 //最大最小值 Math.max(12, 21); Math.min(2, 3); // ...