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. jmeter中获取token和cookie

    ## 登录获取token 1.添加请求 1.1 输入接口中需要携带的参数的值 2.正则表达式提取器提取出值 3.输入token数据 "token":"(.+?)" ...

  2. 9.异步redis

    在使用Python代码操作redis时候,连接.操作.断开都是网络IO #安装支持异步redis的模块 pip3 install aioredis async def execute(address, ...

  3. java中HashMap的设计精妙在哪?

    摘要:本文结合图解和问题,教你一次性搞定HashMap 本文分享自华为云社区<java中HashMap的设计精妙在哪?用图解和几个问题教你一次性搞定HashMap>,作者:breakDaw ...

  4. Day1:Markdown文本基础操作

    Markdown学习 标题 一级标题 输入:#+空格+标题名字 :快捷键(Ctrl+1~6) 二级标题 输入:##+空格+标题名字 为二级标题 依次加#(最多六级标题) 三级标题 四级标题 字体 He ...

  5. 第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 文件存储服务 1. 需求背景 2. 核心功能 3. 存储策略 3.1 本地存储 3.2 FastDFS存储 3.3 云存储 3.4 minio 4. 技术设计 文件存储服务 全套代码及资料全部完 ...

  6. devexpress 中advBandedGridView内容自动换行和调整自适应行高

    首先是自动换行,可以创建一个repositoryItemMemoEdit 并绑定到需要换行的列中 再设置一下repositoryItemMemoEdit高度自适应,这样子就完成了自动换行了 repos ...

  7. 通过启动脚本控制PHP-FPM开关

    vi /etc/init.d/php-fpm 复制粘贴以下内容: #! /bin/sh# Comments to support chkconfig on CentOS# chkconfig: 234 ...

  8. Java实现Excel批量导入数据库

    场景说明 在实际开发中,经常需要解析Excel数据来插入数据库,而且通常会有一些要求,比如:全部校验成功才入库.校验成功入库,校验失败返回提示(总数.成功数.失败数.失败每行明细.导出失败文件明细-) ...

  9. 【Java SE】Day10接口、多态

    一.接口 1.概述 是一种引用类型,是方法的集合,内部封装了各种方法 引用类型:数组.类.接口.包装类 2.方法的定义格式 抽象方法:无方法体,子类实现 默认方法: 静态方法:static修饰,可以由 ...

  10. 使用python脚本传递参数:(三种方式可收藏)

    背景:使用python脚本传递参数在实际工作过程中还是比较常用,以下提供了好几种的实现方式: 一.使用sys.argv的数组传入说明:使用sys.argv必须按照先后的顺序传入对应的参数:sys.ar ...