C语言学生管理系统源码分享

  1 大家好
  2 我就是如假包换的...陈玲
  3 自从运营了C语言程序设计微信公众号
  4 很多粉丝都给我备注
  5 ...奇葩
  6 实在是不敢当
  7 也被人开始叫玲玲姐
  8 我知道
  9 很多人都想看我出境
 10 我本人也有 1 年多的舞台演讲训练
 11 实话告诉大家 —— 我喜欢出境
 12
 13 不过,既然我们做编程语言公众号的,就要去掉其他因素,我们挖掘文字本身所蕴含的力量。所以,这次分享的表达方式就是 —— 纯文字。
 14
 15 今天的分享,只有一个目的
 16 就是上代码
 17 那么,准备好了
 18 #include<stdio.h>
 19 #include<stdlib.h>
 20 //结构体可以存放的学生信息最大个数,不可变变量
 21  int const MAX_LENGTH=100;
 22  //学生信息结构体数组,最多可以存放100个学生信息
 23  struct student{
 24     int id; //学号
 25     char *name; //姓名
 26     int age; //年龄
 27     float c_score; //C语言成绩
 28     float english_score; //英语成绩
 29     float database_score; //数据库成绩
 30     float total_score; //总分
 31  }student_array[MAX_LENGTH];
 32
 33  //学生信息数量
 34  int student_count=0;
 35
 36  //函数声明
 37  void print_all_students();
 38  void input_info();
 39  void query_info();
 40  void modify_info();
 41  void delete_info();
 42  void compute_total_score();
 43  void sort_info();
 44  int search_one_student();
 45  void print_one_student(struct student one);
 46  void delete_one_student(int student_index);
 47  char * get_item_name(int item_index);
 48  void modify_one_student(int student_index);
 49  void sort_by_id();
 50  void sort_by_c_score();
 51  void sort_by_english_score();
 52  void sort_by_database_score();
 53
 54  //主函数
 55  int main()
 56  {
 57     while(1)
 58     {
 59         printf("请选择要使用的功能:\n");
 60         printf("录入信息,请输入1,然后回车!\n");
 61         printf("查询信息,请输入2,然后回车!\n");
 62         printf("修改信息,请输入3,然后回车!\n");
 63         printf("删除信息,请输入4,然后回车!\n");
 64         printf("计算总分,请输入5,然后回车!\n");
 65         printf("排序信息,请输入6,然后回车!\n");
 66         printf("输出全部,请输入0,然后回车!\n");
 67         printf("退出程序,请输入-1,然后回车!\n");
 68         //函数选择变量
 69         int function=0;
 70         //输入选择的函数编号值
 71         scanf("%d",&function);
 72         //根据输入的函数编号,执行对应的功能
 73         switch(function){
 74         case -1:
 75             exit(1);
 76         case 0:
 77             print_all_students();
 78             break;
 79         case 1:
 80             input_info();
 81             break;
 82         case 2:
 83             query_info();
 84             break;
 85         case 3:
 86             modify_info();
 87             break;
 88         case 4:
 89             delete_info();
 90             break;
 91         case 5:
 92             compute_total_score();
 93             break;
 94         case 6:
 95             sort_info();
 96             break;
 97         default:
 98             printf("请输入正确的功能编号!!!\n\n");
 99             break;
100         }
101     }
102     return 0;
103  }
104
105  //录入信息函数
106 void input_info()
107  {
108     printf("当前功能————录入信息!\n");
109     //判断是否还有空间
110     if(student_count<MAX_LENGTH)
111     {
112         //声明一些临时变量
113         int id=0; char *name=(char *)malloc(100);
114         int age=0; float c_score=0;
115         float english_score=0;
116         float database_score=0;
117         printf("请输入学生信息,格式为:学号,姓名,年龄,C语言成绩,英语成绩,数据库成绩\n");
118         scanf("%d %s %d %f %f %f",&id,name,&age,&c_score,&english_score,&database_score);
119         printf("学生信息校对:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f\n",id,name,age,c_score,english_score,database_score);
120         //学生信息加入结构体数组
121         student_array[student_count].id=id;
122         student_array[student_count].name=name;
123         student_array[student_count].age=age;
124         student_array[student_count].c_score=c_score;
125         student_array[student_count].english_score=english_score;
126         student_array[student_count].database_score=database_score;
127         student_count++;
128         //是否继续录入信息
129         printf("是否继续录入信息?继续请输入y,返回主菜单输入n\n");
130         char go_on;
131         scanf("%s",&go_on);
132         if(go_on==‘y‘)
133         {
134             input_info();
135         }
136     }
137     else
138     {
139         printf("学生结构体数据已满,可以删除一部分学生信息!\n");
140     }
141  }
142
143
144  //查询信息函数
145 void query_info()
146  {
147     printf("当前功能————查询信息!\n");
148     printf("请输入学生的学号\n");
149     int id=0;
150     scanf("%d",&id);
151     //查找输入id学生的序号
152     int student_index=search_one_student(id);
153     if(student_index!=-1)
154     {
155         print_one_student(student_array[student_index]);
156     }
157     else
158     {
159         printf("没有该学号的学生!\n");
160     }
161     //是否继续查询信息
162     printf("是否继续查询信息?继续请输入y,返回主菜单输入n\n");
163     char go_on;
164     scanf("%s",&go_on);
165     if(go_on==‘y‘)
166         query_info();
167  }
168
169
170  //修改信息函数
171 void modify_info()
172  {
173     printf("当前功能————修改信息!\n");
174     printf("请输入学生的学号\n");
175     int id=0;
176     scanf("%d",&id);
177     //查找输入id学生的序号
178     int student_index=search_one_student(id);
179     if(student_index!=-1)
180     {
181         modify_one_student(student_index);
182     }
183     else
184     {
185         printf("没有该学号的学生!\n");
186     }
187 }
188
189
190  //删除信息函数
191 void delete_info()
192  {
193     printf("当前功能————删除信息!\n");
194     printf("请输入学生的学号\n");
195     int id=0;
196     scanf("%d",&id);
197     //查找输入id学生的序号
198     int student_index=search_one_student(id);
199     if(student_index!=-1)
200     {
201         //防止student_index被改变,传入temp_index计算
202         int temp_index=student_index;
203         print_one_student(student_array[temp_index]);
204         //删除前进行确认
205         printf("确定删除学号 %d 同学的信息?继续请输入y\n",id);
206         char be_true;
207         scanf("%s",&be_true);
208         if(be_true==‘y‘)
209         {
210             printf("%d\n", student_index);
211             //执行删除动作
212             delete_one_student(student_index);
213         }
214     }
215     else
216     {
217         printf("没有该学号的学生!\n");
218     }
219     //是否继续删除信息
220     printf("是否继续删除信息?继续请输入y,返回主菜单输入n\n");
221     char go_on;
222     scanf("%s",&go_on);
223     if(go_on==‘y‘)
224     delete_info();
225  }
226
227
228  //计算总分函数
229 void compute_total_score()
230  {
231      printf("当前功能————计算总分!\n");
232     for (int i = 0; i < student_count; ++i)
233     {
234          student_array[i].total_score=student_array[i].c_score+student_array[i].english_score+student_array[i].database_score;
235          print_one_student(student_array[i]);
236          printf("总成绩:%f\n", student_array[i].total_score);
237     }
238     printf("总分计算完成!!!\n");
239  }
240
241
242  //成绩排序函数
243 void sort_info()
244  {
245     printf("当前功能————成绩排序!\n");
246     printf("排序前所有学生信息如下:\n");
247     print_all_students();
248     int sort_type;
249     while(1)
250     {
251      printf("请输入排序字段,学号:1,C语言成绩:2,英语成绩:3,数据库成绩:4\n");
252      scanf("%d",&sort_type);
253      if(sort_type>=1&&sort_type<=4)
254      break;
255     }
256     switch(sort_type)
257     {
258     case 1:
259         sort_by_id();
260         break;
261     case 2:
262         sort_by_c_score();
263         break;
264     case 3:
265         sort_by_english_score();
266         break;
267     case 4:
268         sort_by_database_score();
269         break;
270     }
271      printf("排序后所有学生信息如下:\n");
272      print_all_students();
273      //是否继续删除信息
274      printf("是否继续排序信息?继续请输入y,返回主菜单输入n\n");
275      char go_on;
276      scanf("%s",&go_on);
277     if(go_on==‘y‘)
278         sort_info();
279  }
280
281
282 //根据输入的学号,遍历结构体数组,若存在该学生,返回数组下标,不存在返回-1
283 int search_one_student(int id)
284  {
285     for (int i = 0; i < student_count; ++i)
286     {
287         if(student_array[i].id==id)
288         {
289             return i;
290         }
291     }
292     return -1;
293  }
294
295
296 //输出某个学生的信息
297 void print_one_student(struct student one)
298 {
299     printf("学生信息:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f\n",one.id,one.name,one.age,one.c_score,one.english_score,one.database_score);
300 }
301
302
303 //输出所有学生的信息
304 void print_all_students()
305 {
306     if(student_count==0)
307     {
308         printf("暂无学生信息\n\n\n");
309     }
310     for (int i = 0; i < student_count; ++i)
311     {
312         print_one_student(student_array[i]);
313     }
314 }
315
316
317 void modify_one_student(int student_index)
318 {
319     //修改前,输出学生信息
320     print_one_student(student_array[student_index]);
321     //字段序号初始值
322     int item_index=0;
323     //不允许修改学号字段
324     while(1)
325     {
326         printf("请输入要修改的字段序号,姓名:1,年龄:2,C语言成绩:3,英语成绩:4,数据库成绩:5\n");
327         scanf("%d",&item_index);
328         if(item_index>=1&&item_index<=5)
329         break;
330     }
331     switch(item_index)
332     {
333         case 1:
334             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
335             char* item_value_1=(char *)malloc(100);
336             ;
337             scanf("%s",item_value_1);
338             student_array[student_index].name=item_value_1;
339             break;
340         case 2:
341             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
342             int item_value_2;
343             scanf("%d",&item_value_2);
344             student_array[student_index].age=item_value_2;
345             break;
346         case 3:
347             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
348             float item_value_3;
349             scanf("%f",&item_value_3);
350             student_array[student_index].c_score=item_value_3;
351             break;
352         case 4:
353             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
354             float item_value_4;
355             scanf("%f",&item_value_4);
356             student_array[student_index].english_score=item_value_4;
357             break;
358         case 5:
359             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
360             float item_value_5;
361             scanf("%f",&item_value_5);
362             student_array[student_index].database_score=item_value_5;
363             break;
364     }
365     printf("修改成功!新的学生信息如下:\n");
366     //修改后输出学生信息
367     print_one_student(student_array[student_index]);
368     //是否继续删除信息
369     printf("是否继续修改该学生信息?继续请输入y,返回主菜单输入n\n");
370     char go_on;
371     scanf("%s",&go_on);
372     if(go_on==‘y‘)
373         modify_one_student(student_index);
374 }
375
376
377 //删除数组对应序号的学生信息,把i位置后面的数据组元素向前移动覆盖i,student_count计数器减1
378 void delete_one_student(int student_index)
379 {
380     for (int i = student_index; i < student_count-1; ++i)
381     {
382         student_array[i]=student_array[i+1];
383     }
384     student_count--;
385     printf("删除完成\n\n\n");
386 }
387
388
389 //根据输入的字段序号,返回字段名称
390 char * get_item_name(int item_index)
391 {
392     switch(item_index)
393     {
394         case 0:
395             return "学号";
396         case 1:
397             return "姓名";
398         case 2:
399             return "年龄";
400         case 3:
401             return "C语言成绩";
402         case 4:
403             return "英语成绩";
404         case 5:
405             return "数据库成绩";
406         default:
407                 return "";
408     }
409 }
410
411
412 //按照id排序,使用最简单的冒泡排序法
413 void sort_by_id()
414 {
415     for (int i = 0; i < student_count; ++i)
416     {
417         for (int j = i; j < student_count; ++j)
418         {
419             if(student_array[i].id>student_array[j].id)
420             {
421                 struct student temp=student_array[i];
422                 student_array[i]=student_array[j];
423                 student_array[j]=temp;
424             }
425         }
426     }
427     printf("按照 学号 排序完成\n");
428 }
429
430
431 //按照C语言成绩排序,使用最简单的冒泡排序法
432 void sort_by_c_score()
433 {
434     for (int i = 0; i < student_count; ++i)
435     {
436         for (int j = i; j < student_count; ++j)
437         {
438             if(student_array[i].c_score>student_array[j].c_score)
439             {
440                 struct student temp=student_array[i];
441                 student_array[i]=student_array[j];
442                 student_array[j]=temp;
443             }
444         }
445     }
446     printf("按照 C语言成绩 排序完成\n");
447 }
448
449
450 //按照英语成绩排序,使用最简单的冒泡排序法
451 void sort_by_english_score()
452 {
453     for (int i = 0; i < student_count; ++i)
454     {
455         for (int j = i; j < student_count; ++j)
456         {
457             if(student_array[i].english_score>student_array[j].english_score)
458             {
459                 struct student temp=student_array[i];
460                 student_array[i]=student_array[j];
461                 student_array[j]=temp;
462             }
463         }
464     }
465     printf("按照 英语成绩 排序完成\n");
466 }
467
468
469 //按照数据库成绩排序,使用最简单的冒泡排序法
470 void sort_by_database_score()
471 {
472     for (int i = 0; i < student_count; ++i)
473     {
474         for (int j = i; j < student_count; ++j)
475         {
476             if(student_array[i].database_score>student_array[j].database_score)
477             {
478                 struct student temp=student_array[i];
479                 student_array[i]=student_array[j];
480                 student_array[j]=temp;
481             }
482         }
483     }
484     printf("按照 数据库成绩 排序完成\n");
485 }
486
487 转发自:微信公众号 xs-cyy
时间: 03-28

C语言学生管理系统源码分享的相关文章

C语言学生学籍信息管理系统源码附赠实验报告

一.课程设计目标 C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题.编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务.本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识.结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要.通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯. 另外,在实际编程中,为了提高编程质量

JAVAweb例程学习源码分享,超级全!

JAVAweb例程学习源码分享,超级全!我自己也从里面学习到了很多东西! 1.BBS论坛系统(jsp+sql)2.ERP管理系统(jsp+servlet)3.OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)4.博客系统(struts+hibernate+spring)5.车辆管理系统(struts+hibernate+spring+oracle)6.家庭理财系统(java+applet)7.教材订购系统(jsp+servlet+mysql)8.酒店管

【迪士尼彩乐园】全套源码分享下载带三个急速,后台带AB盘完美无错

[迪士尼彩乐园]全套源码分享下载带三个急速,后台带AB盘完美无错联系Q:2947702644 源码类别:时时系统/两面盘界面语言:简体中文源码授权:无加密文件及认证授权,永久性可直接使用.版本支持:PC/WAP网页版编程语言:PHP ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有

JEECG社区 一个微信教育网站案例源码分享

微信教育网站案例演示: http://t.cn/RvPgLcb 源码分享: http://pan.baidu.com/s/1cUImy 截图演示: JEECG社区 一个微信教育网站案例源码分享,布布扣,bubuko.com

仿乐享微信源码分享,把你的生意做到微信里

99%的人不知道的微信秘密!微信里的商机.仿乐享微信源码分享,把你的生意做到微信里. WeiKuCMS  (微酷CMS)功能特点:人工客服新功能正式上线!粉丝行为分析.渠道二维码生成.二维码折扣,微菜单,微统计,会员卡签到,微会员,刮刮卡,大转盘,优惠券,积分兑换,微官网,砸金蛋,微调研,微投票,微相册,微商城,微团购,微留言,微喜帖,商家入驻,微门店,微餐饮,微酒店,微教育,微物业,微医疗,微信墙,微花店,微美容,微生活. 微信公共账号轻松接入,无限自定义图文回复.欢迎您的加入! 微酷WeiK

Android开发之自己定义TabHost文字及背景(源码分享)

使用TabHost 能够在一个屏幕间进行不同版面的切换,而系统自带的tabhost界面较为朴素,我们应该怎样进行自己定义改动优化呢 MainActivity的源码 package com.dream.ledong; import android.app.TabActivity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.Gr

AppCan 移动应用开发项目源码分享:嗡嗡旅游App开发

开发者介绍:老家湖北巴东好山好水,神农溪.巴人河.三里城等都是旅游好去处.中秋节回了趟老家,看到家乡的原生态景色吸引了大批游客,由此萌发了想法:用移动技术开发一个App试水,把家乡景点介绍给更多的人.于是,耗时一个月的<嗡嗡旅游>应运而生,特此将项目源码分享给广大AppCan开发者. 项目实现功能 用户注册.登录,游记查看和发布,查看辖区内景区.酒店.交通.攻略等信息,内容收藏.评论和分享,查看地图,景区门票.酒店电话预定等. 项目使用插件 引导页 引导页3张图片采用的是全屏显示的slider

干货分享——android源码分享网站

干货分享--android源码分享网站 android源码应用分享站点,各种技术分支的源码都有,现在分享给大家 安卓源码服务专家 集合了大量的例子源码,总会找到你想要的 http://www.javaapk.com/ 泡在网上的日子 实时分享android最新的开源项目,大量的教程 http://www.jcodecraeer.com/ android的code4app--apkbus 大量的例子源码和android开发文档 http://d.apkbus.com/ 安卓巴士 http://ww

[Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分

init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of package } 注意:它是没有输入参数和返回参数的. identifier首字母大小写区分 当identifier(比如constant,variable,type,function,struct field,...)的命名首字母是大写的话,那表示这个identifier在包外是可以见的: 类似p