600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 成绩管理系统(C语言)完整代码 纯C的练手程序

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

时间:2018-07-18 09:15:19

相关推荐

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

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

注释详细,代码完整,编译执行环境为vs社区版 源代码 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;}

自定义函数的分文件编写 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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。