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. dockerNginx代理本地目录

    dockerNginx代理本地目录 ssl_certificate cert/5900588_test.zk.limengkai.work.pem; ssl_certificate_key cert/ ...

  2. Day09:switch——case结构的使用详解

    switch--case结构的使用详解 什么是switch--case结构 他也是一种多选择结构 switch--case结构是类于if--else的语法,通过比较而输出对应的内容: 通俗的讲,好比我 ...

  3. 8.drf-序列化器

    在序列化类中,如果想使用request,则可以通过self.context['request']获取 序列化器的主要由两大功能 - 对请求的数据进行校验(底层调用的是Django的Form和Model ...

  4. 使用 Go HTTP 框架 Hertz 进行 JWT 认证

    前言 上一篇文章简单介绍了一个高性能的 Go HTTP 框架--Hertz,本篇文章将围绕 Hertz 开源仓库的一个 demo,讲述如何使用 Hertz 完成 JWT 的认证与授权流程. 这里要说明 ...

  5. PHP 代码解一元二次方程

    1 function php_getSolutionOVQE($a,$b,$c=0){ 2 $x1=0; 3 $x2=0; 4 $detal=0; 5 if($a==0 && $b== ...

  6. uniapp 实现小程序中自定义tabBar 的方法

    uniapp 实现小程序中自定义tabBar 的方法 第一种方式: page.json中配置 "tabBar": { "color": "#7A7E8 ...

  7. ubuntu 20.04 / 22.04 运行32位程序

    sudo dpkg --add-architecture i386 sudo apt install libc6:i386 libstdc++6:i386 sudo apt-get update su ...

  8. 一文讲透CabloyJS全栈框架的来龙去脉

    本文受众 咱们做软件开发,就好比是建造一幢幢房屋,一座座桥梁,既可以是北方宫殿的巍峨,也可以有南方庭院的雅致,更可以是横跨群山的峻险与孤悬.那么,不同的语言.不同的框架也都由其内在的秉质吸引着一批粉丝 ...

  9. 关于CSDN博客上传图片的接口研究

    代码实现 import requests from requests_toolbelt import MultipartEncoder import urllib.parse fields = { ' ...

  10. 漫谈计算机网络:网络层 ------ 重点:IP协议与互联网路由选择协议

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...