纯C语言的练习程序,完全不涉及其它方面的知识

  • 注释详细,代码完整,编译执行环境为vs2017社区版
  1. 源代码 main.c
#define _CRT_SECURE_NO_DEPRECATE//WARNINGS,为了使用经典输入输出函数所需的声明
#include <stdio.h>
#include<stdlib.h>//为了使用自己定义的头文件,如果没有自定义头文件,可以不写这一句
#include"ownfunctions.h"//导入自己的头文件
#define length 30//班级的学生数量,当实际需要时随时更改typedef struct student//学生节点定义
{char num[10];//以字符串的形式存储学号char name[10];//存储学生的姓名int math;//数学成绩int pro;//专业课成绩int tag;//tag=0表示该学生信息无效,=1表示有效
}Stu;//用Stu 代替 struct studentvoid addStu(Stu *class);
void delStu(Stu *class, int j);
void changeStu(Stu *class, int j);
void showStu(Stu *class, int j);
int findStu(Stu *class ,int k);//返回class中第k个有效的学生下标
int length_of_class(Stu *class);//返回class的有效学生数int main(void)
{welcome();//打印出欢迎页面showmenu();//展示菜单选项Stu class[length];//创建班级数组int i;for (i = 0; i < length; i++)//置学生位为“无效” {class[i].tag = 0;//tag = 0表示无效,tag =1 表示有效}int key;key = menu();//调用菜单功能选择函数int j;//用来标记需要删除或展示的学生是班级排位中的第几个学生while (key)//在key不为0时,一直循环执行菜单功能{switch (key){case 1:printf("its menu1 :增加一个学生的信息\n");addStu(class);//班级未满时,向第一个tag=0的位置增加一个学生break;case 2:printf("its menu2 :删除一个学生的信息\n");j = getstu(); //选择第j个学生delStu(class, j); //当选择的j合理时,令该位置的学生信息无效break;case 3:printf("its menu3 :修改一个学生的信息\n");j = getstu();changeStu(class, j);//当选择的j合理时,修改该学生的信息break;case 4:printf("its menu4 :展示学生信息\n");j = choosemenu();//从函数获得菜单选项,1或者2showStu(class, j);//j=1时展示全部学生信息,j=2选择展示某一个学生的信息break;default:break;}showmenu();//再次显示菜单key = menu();}_exit();return 0;
}//以下为自定义函数部分
void addStu(Stu *class)
{int i = 0;while (class[i].tag == 1 && i < length)i++;//寻找第一个tag 不为1 的iif (i == length){printf("班级已满,添加失败\n");return;}//以下为输入学生信息功能class[i].tag = 1;printf("输入第%d个学生的名字\n", i + 1);scanf("%s", class[i].name);printf("输入第%d个学生的学号\n", i + 1);scanf("%s", class[i].num);printf("输入第%d个学生的数学成绩\n", i + 1);scanf("%d", &class[i].math);printf("输入第%d个学生的专业成绩\n", i + 1);scanf("%d", &class[i].pro);//展示刚输入的学生信息printf("\n第%d个学生的名字是%s\n", i + 1, class[i].name);printf("第%d个学生的学号是%s\n", i + 1, class[i].num);printf("第%d个学生的数学成绩是%d\n", i + 1, class[i].math);printf("第%d个学生的专业成绩是%d\n\n", i + 1, class[i].pro);printf("第%d个学生的信息已录入\n", i + 1);
}void delStu(Stu *class, int j)
{int a;a = length_of_class(class);if (j > a || j < 1)//在此处判断j是否合理{printf("您选择的学生不合理,返回上一级菜单\n");return;}int i = findStu(class,j);//找到第j个tag=1的学生//先展示第j个学生的信息if (i == -1){printf("查找学生失败,返回上一级菜单\n");return;}printf("第%d个学生的名字:%s\n", j, class[i].name);printf("第%d个学生的学号:%s\n", j, class[i].num);printf("第%d个学生的数学成绩:%d\n", j, class[i].math);printf("第%d个学生的专业成绩:%d\n", j, class[i].pro);//令该学生的信息无效class[i].tag = 0;printf("第%d个学生的信息已删除\n", j);
}void changeStu(Stu *class, int j)
{int a;a = length_of_class(class);if (j > a || j < 1)//在此处判断j是否合理{printf("您选择的学生不合理,返回上一级菜单\n");return;}int i = findStu(class, j);//找到第j个tag=1的学生if (i == -1){printf("查找学生失败,返回上一级菜单\n");return;}//先展示第j个学生的信息printf("第%d个学生的名字:%s\n", j, class[i].name);printf("第%d个学生的学号:%s\n", j, class[i].num);printf("第%d个学生的数学成绩:%d\n", j, class[i].math);printf("第%d个学生的专业成绩:%d\n", j, class[i].pro);//修改第j个学生的信息printf("输入第%d个学生的名字\n", j);scanf("%s", class[i].name);printf("输入第%d个学生的学号\n", j);scanf("%s", class[i].num);printf("输入第%d个学生的数学成绩\n", j);scanf("%d", &class[i].math);printf("输入第%d个学生的专业成绩\n", j);scanf("%d", &class[i].pro);//展示修改后的学生信息printf("第%d个学生的名字是%s\n", j, class[i].name);printf("第%d个学生的学号是%s\n", j, class[i].num);printf("第%d个学生的数学成绩是%d\n", j, class[i].math);printf("第%d个学生的专业成绩是%d\n", j, class[i].pro);printf("第%d个学生的信息已重新录入\n\n", j);
}void showStu(Stu *class, int j)
{if (j != 1 && j != 2){printf("选择菜单项有误,返回上一级功能\n");return;}int i;int k = 0;if (j == 1)//展示全部学生的信息{for (i = 0; i < length; i++)//遍历整个班级{if (class[i].tag == 1)//打印出所有有效的学生信息{k++;printf("第%d个学生的信息如下:\n",k);printf("第%d个学生的姓名:%s\n", k,class[i].name);printf("第%d个学生的学号:%s\n", k, class[i].num);printf("第%d个学生的数学成绩:%d\n", k, class[i].math);printf("第%d个学生的专业成绩:%d\n", k, class[i].pro);}}printf("全部学生的信息已打印完毕\n");}else//选择展示一个学生的信息{printf("您希望展示第几位学生的信息:\n");scanf("%d", &k);while (k < 1 || k > length){printf("您选择的学生不合理,请重新选择:\n");scanf("%d", &k);getchar();}//在此处寻找第k个tag=1的学生i = findStu(class,k);if (i == -1){printf("查找学生失败,返回上一级菜单\n");return;}//打印学生信息printf("第%d个学生的信息如下:\n", k);printf("第%d个学生的姓名:%s\n", k, class[i].name);printf("第%d个学生的学号:%s\n", k, class[i].num);printf("第%d个学生的数学成绩:%d\n", k, class[i].math);printf("第%d个学生的专业成绩:%d\n", k, class[i].pro);}
}int findStu(Stu *class ,int k)//找到class中第k个tag=1的下标值,并返回
{int i=0, j=0;//先求出class中有几个tag=1的学生,当k不合理时返回上一级菜单for (i = 0; i < length; i++){if (class[i].tag == 1)j++;}if (k > j || k < 1){printf("选择的学生不合理,返回上一级菜单\n");return -1;}i = -1; j = 0;//求出第k个tag=1的iwhile (j < k){i++;if (class[i].tag == 1){j++;}}return i;
}int length_of_class(Stu *class)
{int i ,j;j = 0;for (i = 0; i < length; i++){if (class[i].tag == 1){j++;}}return j;
}
  1. 自定义函数的分文件编写 ownfunctions.h
#pragma once//IDE自动添加的语句
#include<stdio.h>
extern length;//令main代码处定义的变量的使用范围扩展至此处
int menu(void);
void _exit(void);
void welcome(void);
void printstar(void);
void showmenu(void);
int getstu(void);
int choosemenu(void);int menu()//可以限制用户输入只能是0~4的整数,提高程序的健壮性。
//个人认为所有程序的用户输入部分都应该做到这点,但是为了更简洁的展示程序功能,本程序没有这样做
{int key;scanf("%d", &key);while (key < 0 || key>4)//判断key是否是属于0~4的整数{printf("请输入合法的菜单选项");scanf("%d", &key);getchar();//当输入字母时,吸收回车键}return key;
}void printstar(void)
{printf("************************************\n");
}
void _exit(void)
{printstar();printf("\n\t感谢使用本系统\t再见\n\n");printstar();
}
void welcome(void)
{printstar();printf("\t欢迎使用成绩管理系统\n");printstar();}void showmenu(void)
{printf("\t请输入数字0~4执行相应功能\n");printf("\t0  退出系统\n\t1  增加一个学生的信息\n");printf("\t2  删除一个学生的信息\n\t3  修改一个学生的信息 \n");printf("\t4  查看一个学生的信息\n\t请勿输入其他内容\n\n\n");
}int getstu(void)
{int j;printf("您想处理第几个学生的信息?\n");scanf("%d", &j);return j;
}int choosemenu(void)
{printf("输入数字1或2来选择功能\n");printf("1:显示整个班级的学生信息\n");printf("2:显示某个学生的信息\n");int key;scanf("%d", &key);while (key < 1 || key>2)//判断key是否是属于1~2的整数{printf("请输入合法的菜单选项");scanf("%d", &key);getchar();//当输入字母时,吸收回车键}return key;
}

成绩管理系统(C语言)完整代码,纯C的练手程序相关推荐

  1. C语言-学生成绩管理系统 【含完整 代码】

    目录 1.系统功能分析 1.1系统信息要求 1.2功能分析 1.3奖学金评选标准 2.系统设计 3.运行效果图 4.测试数据: 5.文件说明: 6.源代码 1.系统功能分析 1.1系统信息要求 1)学 ...

  2. 更新学生的成绩C语言,学生成绩管理系统C语言代码实现.pdf

    学生成绩管理系统C语言代码实现 这篇文章主要为大家详细介绍了C语言代码实现学生成绩管理系统,文中示 代码介绍的非常详细,具有一定的参 考价值,感兴趣的小伙伴们可以参考一下 C语言实现了学生成绩管理系统 ...

  3. 学生成绩表c语言,学生成绩管理系统C语言(附完整源代码) .doc

    学生成绩管理系统C语言(附完整源代码) 课程设计报告 学生成绩管理系统 院系: 专业: 班级: 完成日期: 2009年1月03日 设计题目:学生成绩管理系统 目录 1.题目描述2.算法设计/设计思想3 ...

  4. 按平均成绩排行c语言文件操作,学生成绩管理系统(c语言结构体以及文件操作)实验报告精选.doc...

    学生成绩管理系统(c语言结构体以及文件操作)实验报告精选 C程序设计 实验报告 编号: 姓名院系学号任课教师于萧指导教师实验地点实验时间实验名称文件操作同 组 人无预习报告(对实验主要内容的认识)得分 ...

  5. java 数据库工资管理系统设计_数据库课程设计—企业工资管理系统(java版完整代码)...

    数据库课程设计-企业工资管理系统(java版完整代码) 数 据 库 课 程 设 计 报 告2016年 5月 20日 目 录企业工资管理系统姓 名 王 素 文班 级 软 133学 号 139074224 ...

  6. 用C语言学生成绩数据库排序功能设计,[c语言学生成绩管理系统]C语言学生成绩管理系统实验报告...

    篇一 : C语言学生成绩管理系统实验报告 实 验 四:结构体(6学时) 实验目的: 1.更加灵活的使用数组作为函数参数: 2.初步掌握开发一个小型实用系统的基本方法: 3.初步掌握书写程序设计开发文档 ...

  7. 生成绩管理系统c语言,学生成绩管理系统——C语言版

    <学生成绩管理系统--C语言版>由会员分享,可在线阅读,更多相关<学生成绩管理系统--C语言版(12页珍藏版)>请在人人文库网上搜索. 1.*常用的标准输入输出函数*/*acc ...

  8. c语言编程项目实践报告快递管理系统,学生成绩管理系统C语言程序设计实践报告.doc...

    学生成绩管理系统C语言程序设计实践报告 (此文档为word格式,下载后您可任意编辑修改!) 中南大学 C语言程序设计实践报告 题 目 学 生 成 绩 管 理 系 统 学生姓名 木雕小象 指导教师 × ...

  9. 用c语言编写图书成绩管理系统,学生成绩管理系统(c语言编写).doc

    学生成绩管理系统(c语言编写) C程序 学生管理系统 /* Note:Your choice is C IDE */ #include "stdio.h" #include&quo ...

最新文章

  1. 微生物组核心OTU鉴定usearch otutab_core
  2. Java编程操作Excel的一种方法
  3. [译]Reduce(软件编写)(第五部分)
  4. java lamda循环条件_Java lambda 循环累加求和代码
  5. 电脑底部任务栏点不动_「方法」在电脑上使用小程序的方法
  6. Mysql数据库(九)——mysql高阶语句(下)
  7. 【codevs2460】【BZOJ1036】树的统计count,第一次的树链剖分
  8. 阿里影业正式成为阿里集团子公司 俞永福辞任执行董事
  9. Spring写第一个程序HelloSpring
  10. 付出与收获对等的自然法则,执行力离开去做马上去做
  11. Linux(ubuntu)下打包 解压
  12. LINUX编译opencv
  13. Python爬虫之JS逆向分析技巧
  14. 基于javaweb+springboot的在线购书系统网上书店图书商城(前台、后台)(java+Springboot+ssm+mysql+maven)
  15. 使用DFA算法,实现敏感词过滤
  16. 【数学建模】微分方程求解 | dsolve函数 | ode45函数
  17. 康耐视VisionPro基础教程-GigE方式 连接相机
  18. PA 调试心得(一个电容引发的问题)
  19. 分享基于白鹭Egret联合Matchvs开发的足球游戏(附Demo源码)
  20. SSL/TLS - 什么是SSL?

热门文章

  1. httprunner(9)运行测试用例的方式总结
  2. 16、OSPF配置实验之LSDB过载保护
  3. 智安网络丨DDoS攻击:无限战争
  4. Number isFinite()方法
  5. Linux驱动开发中的中间件:设备树
  6. 58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!
  7. excel表格拆分怎么做?
  8. 区块链技术在司法行业的服务应用
  9. 直击|咪蒙、才华有限青年注销 旗下公众号清空或停更
  10. 英语中的开音节,闭音节