前情提示

这是本人大一的C语言程序设计的结课设计作业,由于这段时间一直在学习Java,C语言很久没学了,所以在CSDN上找了很多代码,经过对比最终发现博客C语言 学生成绩管理系统 控制台 文件操作(未涉及数据库)最符合我的需求,然后对这个程序进行了一些修改,于是我的结课设计就诞生了

程序简介

本程序设计具有学生信息的输入、显示、查询、更新、删除、保存等功能,利用清屏函数使操作界面简洁美观,易于操作。程序用了指针、结构体、链表等知识点。运用菜单实现交互式管理,用户轻松的按键即可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足需要

流程图

源程序函数目录

源代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define max 100     //数组定义统一大小int g = 0;       //全局变量,为登录时输入密码次数
int student_number = 5;        //全局变量,student_number为学生的人数struct user      //定义一个结构体,存储用户登录账号和密码,并初始化五个管理员的信息
{char username[20];char password[20];
}user[5] = {{"蒋超", "1450824311"},{"李佳树", "2041775273"},{"刘英杰", "395636706"},{"胡友亮", "924056026"},{"黄家杨", "2946644844"}
};struct student        //定义结构体,包含学生信息,并初始化五个学生的信息
{char name[max];        //姓名char num[max];      //学号char sex[max];      //性别int chinese;        //语文成绩int mathematic;       //数学成绩int english;      //英语成绩int computer;     //计算机成绩
}s[5] = {{  "蒋超", "00001", "boy", 80,90,80,90},{  "李佳树", "00002", "boy", 60,80,90,50},{  "黄家杨", "00003", "girl", 85,65,75,90},{  "胡友亮", "00004", "boy", 55,65,75,80},{  "刘英杰", "00005", "girl", 90,95,98,99}
};struct student* p;        //定义一个结构体指针//主菜单函数声明
void login();               //登入函数
void main_menu();               //主界面函数
void input_record();        //输入学生成绩处理   1
void show_record();         //显示学生成绩处理   2
void search_record();       //查询学生成绩处理   3
void change_record();       //更新学生成绩处理   4
void delete_record();       //删除学生信息   5
void calc_record();         //计算成绩处理   6
void save_record();         //保存处理   7
void exit_record();         //退出   8//查询子函数声明
void search_by_num();       //学号查询
void search_by_name();      //姓名查询
void search_by_sex();       //性别查询
void search_by_exit();      //返回上一级//计算子函数声明
void calc_sum();            //计算总成绩
void calc_ave();            //计算平均成绩
void calc_eixt();           //返回上一级//自定义函数
void print_table();         //表头
void print_table_sum();     //总成绩表格
void print_table_ave();     //平均分表格
void read();                //将文件中的数据读入到结构体数组中int main()                    //*主函数
{login();       //首先进行管理员登录main_menu();     //登录成功后显示主界面return 0;
}void login()    //登录函数,管理员使用该系统前需进行登录,定义密码只允许输错三次
{int i;char id[20], password[20];printf("****登录界面****\n");printf("请输入账号名:");scanf("%s", id);printf("请输入密码:");scanf("%s", password);for (i = 0; i < 5; i++)        //遍历五个管理员的信息,如果输入的信息在初始化的信息中存在则登录成功{if (strcmp(id, user[i].username) == 0 && strcmp(password, user[i].password) == 0){printf("登录成功!\n");system("cls");       //清屏函数main_menu();          //登录成功,打印主界面break;}}if (i == 5)     //遍历完一轮管理员信息,此时i=5且未找到符合的管理员信息,说明账号密码输入错误{system("cls");printf("登录失败!\n\n");g++;   //有三次登录机会,每次登录都遍历一次user结构体if (g >= 3)        //若三次机会都用完,则退出系统{printf("你已经输错三次,将自动退出系统\n");exit(1);}else{login(); //否则,登陆成功,进入主界面}}
}void main_menu()    //展示主菜单,并对用户的请求做出对应响应
{read();                //将文件中的学生信息读取到链表中system("cls");       //清屏函数int x;//主菜单printf("*************************************************\n");printf("*\t欢迎使用高校学生成绩管理系统V2.0\t*\n");printf("*************************************************\n");printf("*\t\t1.输入学生信息\t\t\t*\n");printf("*\t\t2.显示学生信息\t\t\t*\n");printf("*\t\t3.查询学生信息\t\t\t*\n");printf("*\t\t4.更新学生信息\t\t\t*\n");printf("*\t\t5.删除学生信息\t\t\t*\n");printf("*\t\t6.计算学生成绩\t\t\t*\n");printf("*\t\t7.保存\t\t\t\t*\n");printf("*\t\t8.退出系统\t\t\t*\n");printf("*************************************************\n");printf("请输入你要执行的操作:");scanf("%d", &x);if (x == 1)input_record();   //输入信息 if (x == 2)show_record();      //显示信息 if (x == 3)search_record();    //查询信息 if (x == 4)change_record();    //更新信息 if (x == 5)delete_record();    //删除信息 if (x == 6)calc_record();      //计算成绩 if (x == 7)save_record();      //保存if (x == 8)exit_record();     //退出else{printf("输入错误,即将重新进入主界面\n");main_menu();}
}void input_record()        //输入学生成绩函数    1
{//定义两个char类型变量来获取用户的输入 char v, z;//在开头位置做一个标记aa:{system("cls");      //清屏函数printf("请输入学生姓名:");scanf("%s", s[student_number].name);printf("请输入学生学号(五位):");scanf("%s", s[student_number].num);printf("请输入学生性别(boy/girl):");scanf("%s", s[student_number].sex);printf("请输入学生语文成绩:");scanf("%d", &s[student_number].chinese);printf("请输入学生数学成绩:");scanf("%d", &s[student_number].mathematic);printf("请输入学生英语成绩:");scanf("%d", &s[student_number].english);printf("请输入学生计算机成绩:");scanf("%d", &s[student_number].computer);printf("请选择是否保存(y或n):");scanf("%s", &z);if (z == 'y')       //若输入为y,则保存信息到文件中{student_number++;save_record();}printf("是否继续添加,请选择(y或n)(否会回到主界面):");scanf("%s", &v);if (v == 'y')      //若输入为y,则跳转至开头标记aa处{goto aa;}else{main_menu();}}
}void show_record()     //显示学生信息函数    2
{system("cls");       //清屏函数int i, k, x;char get;x = student_number;print_table();       //打印表头 for (i = 0; i < x; i++)    //打印表格数据 {printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);}printf("\n1.返回主界面\n2.返回上一级\n");printf("请输入:");scanf("%d", &k);if (k == 1){main_menu();}else if (k == 2){main_menu();}}void search_record()    //查询学生成绩函数    3
{system("cls");       //清屏函数int x;//打印菜单printf("1 按学号查询\n");printf("2 按姓名查询\n");printf("3 按性别查询\n");printf("4 返回上一级\n");printf("请输入:");scanf("%d", &x);if (x == 1)search_by_num();   //按学号查询函数 if (x == 2)search_by_name();    //按姓名查询函数 if (x == 3)search_by_sex(); //按性别查询查询 if (x == 4)search_by_exit();    //返回主界面else{printf("输入错误\n");search_record();     //重新查询}}void print_table()      //打印学生信息表格的表头函数
{printf("+----------+----------+----------+------+------+------+------+\n");printf("|   姓名   |   学号   |   性别   | 语文 | 数学 | 英语 |计算机|\n");printf("+----------+----------+----------+------+------+------+------+\n");
}void search_by_num()    //查询学生信息函数的子函数——按学号查询函数
{int i, k;char num1[max];       //用户输入学生学号system("cls");      //清屏函数printf("请输入要查找的学号:");scanf("%s", num1);for (i = 0; i < student_number; i++)      //遍历链表,寻找是该学号是否存在{if (strcmp(num1, s[i].num) == 0){print_table();printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);break;}}if (i == student_number)      //student_number为全局变量学生的人数{printf("不存在这个学号!\n\n");}printf("1.返回主界面\n2.继续查询\n");printf("请输入:");scanf("%d", &k);if (k == 1){main_menu();}else{search_record();}
}void search_by_name()    //询学生信息函数的子函数——按姓名查询函数
{int i, k;char name1[max];  //用户输入学生姓名system("cls");      //清屏函数printf("请输入查找的姓名:");scanf("%s", name1);for (i = 0; i < student_number; i++)      //遍历链表,看该名字是否存在{if (strcmp(name1, s[i].name) == 0){print_table();printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);break;}}if (i == student_number) {printf("不存在这个姓名\n");}printf("1.返回主界面\n2.继续查询\n");printf("请输入:");scanf("%d", &k);if (k == 1){main_menu();}else{search_record();}
}void search_by_sex()    //询学生信息函数的子函数——按性别查询函数
{int i, k;char sex1[max];       //用户输入学生的性别system("cls");     //清屏函数printf("请输入查找的性别(boy/girl):");scanf("%s", sex1);print_table();   //表格for (i = 0; i < student_number; i++)      //遍历链表,看该性别是否存在{if (strcmp(sex1, s[i].sex) == 0)printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);}if (i == student_number){printf("1.返回主界面\n2.继续查询\n");}printf("请输入:");scanf("%d", &k);if (k == 1){main_menu();}else{search_record();}
}void search_by_exit()    //返回上一级(返回主菜单)的函数
{main_menu();
}void change_record()    //更新学生成绩函数    4
{//输入学生学号修改学生信息并保持system("cls");      //清屏函数int i;char name2[max], sex2[max];int chinese2, mathematic2, english2, computer2;char numbefor[max];printf("请输入要修改的学生的学号:");     //用户输入学生学号scanf("%s", numbefor);for (i = 0; i < student_number; i++)     //遍历链表,看该学号是否存在{if (strcmp(numbefor, s[i].num) == 0)   //存在{printf("修改前:\n");print_table();       //打印表格printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);printf("请分别输入修改后信息\n");printf("请输入学生姓名:");scanf("%s", name2);printf("请输入学生性别:");scanf("%s", sex2);printf("请输入学生语文成绩:");scanf("%d", &chinese2);printf("请输入学生数学成绩:");scanf("%d", &mathematic2);printf("请输入学生英语成绩:");scanf("%d", &english2);printf("请输入学生计算机成绩:");scanf("%d", &computer2);printf("请选择是否保存(y或n):");getchar();if (getchar() == 'y')     //修改学生信息{strcpy(s[i].name, name2);strcpy(s[i].sex, sex2);s[i].chinese = chinese2;s[i].mathematic = mathematic2;s[i].english = english2;s[i].computer = computer2;save_record();     //保存学生信息到文件中printf("修改后:\n");printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);printf("\n");}break;}}if (i == student_number){printf("很抱歉!没有这位学生\n");}printf("是否继续修改,请选择(y/n):");getchar();if (getchar() == 'y'){change_record();       //继续修改}else{main_menu();        //返回主界面}
}void delete_record()    //删除学生信息函数    5
{//输入学生学号删除学生信息并保存 system("cls");char num4[max];char a;int v;printf("请输入要删学生的学号:\n");scanf("%s", num4);int i, j;for (i = 0; i < student_number; i++)         //遍历链表,看学号是否存在{if (strcmp(num4, s[i].num) == 0)        //存在,执行删除操作{printf("你将要删除该学生信息\n");printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);printf("\n");printf("y 确认删除\tn 取消\n");printf("请输入:");scanf("%s", &a);if (a == 'y'){for (j = i; j < student_number; j++)      //将链表中该节点指向下一节点以实现删除操作{strcpy(s[j].num, s[j + 1].num);  strcpy(s[j].name, s[j + 1].name);  strcpy(s[j].sex, s[j + 1].sex);s[j].chinese = s[j + 1].chinese;  s[j].mathematic = s[j + 1].mathematic;  s[j].english = s[j + 1].english;s[j].computer = s[j + 1].computer;}printf("删除成功!\n");student_number--;      //全局变量,student_number-1save_record();        //将删除后的信息保存到文件中}else{printf("已取消操作\n");}}}if (i == student_number)      //该学号不存在{printf("没有这个学号的学生\n");}printf("1.继续删除 2.返回主界面\n");printf("请输入:");scanf("%d", &v);if (v == 1){delete_record();}else{main_menu;}
}void calc_record()    //计算学生成绩函数    6
{//有两个功能,一个是计算总成绩一个是计算平均分 system("cls");       //清屏函数int x;printf("1 计算总成绩\n");printf("2 计算平均分\n");printf("3 返回上一级\n");printf("请输入:");scanf("%d", &x);if (x == 1)calc_sum();        //计算总成绩if (x == 2)calc_ave();     //计算平均成绩if (x == 3)main_menu();       //返回主界面else{printf("输入错误\n");calc_record();   //重新打印该界面}
}void print_table_sum()    //计算总成绩函数的子函数——打印总成绩表格的表头
{printf("+----------+----------+----------+------+------+------+------+------+\n");printf("|   姓名   |   学号   |   性别   | 语文 | 数学 | 英语 |计算机|总成绩|\n");printf("+----------+----------+----------+------+------+------+------+------+\n");
}void print_table_ave()    //计算平均分函数的子函数——打印平均成绩表格的表头
{printf("+----------+----------+----------+------+------+------+------+------+\n");printf("|   姓名   |   学号   |   性别   | 语文 | 数学 | 英语 |计算机|平均分|\n");printf("+----------+----------+----------+------+------+------+------+------+\n");
}void calc_sum()    //计算学生成绩函数的子函数——计算总成绩函数
{print_table_sum();     //打印表头int i, k, sum = 0;       //sum为学生的总成绩int x = student_number;        //student_number为学生人数for (i = 0; i < x; i++){sum = s[i].chinese + s[i].mathematic + s[i].english + s[i].computer;printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|%6d\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer, sum);}printf("1 返回上一级\n2 返回主界面\n ");printf("请输入:");scanf("%d", &k);if (k == 1)calc_record();if (k == 2)main_menu();else{printf("输入错误!\n");calc_record();}
}void calc_ave()    //计算学生成绩函数的子函数——计算平均成绩函数
{print_table_ave();     //打印表头int i, k;int x = student_number;     //student_number为学生人数float ave;     //ave为学生平均成绩for (i = 0; i < x; i++){ave = (s[i].chinese + s[i].mathematic + s[i].english + s[i].computer) * 0.25;printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|%6.2f\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer, ave);if (i == 6){break;}}printf("1 返回上一级\n2 返回主界面\n ");printf("请输入:");scanf("%d", &k);if (k == 1)calc_record();if (k == 2)main_menu();else{printf("输入错误!\n");calc_record();}
}void calc_eixt()    //返回上一级(返回主菜单)函数
{main_menu();
}void save_record()  //保存学生信息函数    7(将结构体数组学生数据写入到文件中)
{FILE* fp;      //定义一个文件指针int i;//若文件打开失败if ((fp = fopen("student-list", "wb")) == NULL)     //以二进制方式对文件进行读写{printf("cannot open file\n");return;}fwrite(&student_number, 4, 1, fp);       //将学生人数写入文件for (i = 0; i < student_number; i++)       //二进制写{if (fwrite(&s[i], sizeof(struct student), 1, fp) != 1){printf("file write error\n");  //出错处理}else{printf("file write sucess\n");    //文件写入成功}}fclose(fp);       //关闭文件指针
}void read()     //将文件中的数据读入到结构体数组中
{FILE* fp;      //定义一个文件指针int i;//若文件打开失败if ((fp = fopen("student-list", "rb")) == NULL)     //以二进制方式读取文件{printf("cannot open file\n");return;}fread(&student_number, 4, 1, fp);     //读取学生人数for (i = 0; i < student_number; i++)        //二进制写{if (fread(&s[i], sizeof(struct student), 1, fp) != 1){printf("file read error\n");    //出错处理}else{printf("file read sucess\n"); //文件读取成功}}fclose(fp);       //关闭文件指针
}void exit_record()     //退出系统函数    8
{printf("感谢您的使用,已退出!");exit;
}

学生信息管理系统(C语言,带文件操作)相关推荐

  1. 学生信息管理系统(C++语言版)

    学生信息管理系统(C语言版) #include "stdio.h" #include "bios.h" #include "conio.h" ...

  2. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc

    学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...

  3. 用c语言录入3组学生数据编程,学生信息管理系统C语言编程

    学生信息管理系统C语言编程 [问题描述] 学生信息的管理是每个学校必须具有的管理功能,主要是对学生的基本情况及学习成绩等方面的管理.该系统模拟一个简单的学生管理系统,要求对文件中所存储的学生数据进行各 ...

  4. 显示学生信息的C语言,学生信息管理系统C语言.doc

    学生信息管理系统C语言 学生信息管理系统 摘要 由于学校规模进一步扩大,学生人数逐年上升,学生信息的管理也变得越来越复杂,切实有效的把学生信息管理系统引入学校教务管理中,对于促进学校管理制度和提高学校 ...

  5. 学生信息管理系统(C语言版本+源码)

    学生信息管理系统(C语言版本) 有需要的可以自行下载 链接:https://download.csdn.net/download/qq_52889967/14955434 源码在后面 java+数据库 ...

  6. c语言学生信息管理ppt,学生信息管理系统(C语言、含代码解释).ppt

    学生信息管理系统(C语言.含代码解释) 第3章 脂类代谢 脂类的分布与生理功能 脂类的消化与吸收 血脂 甘油三酯的中间代谢 类脂代谢 脂类代谢紊乱 3.1 脂类的分布和生理功能 3.1.1 脂类的分布 ...

  7. 学生信息管理系统C语言单链表文件实现

    功能概述:分有教师端和学生端 1.录入学生信息     2.排列学生信息    3.修改学生信息     4.删除学生信息       5.查找学生信息     6.修改系统密码       7.获取 ...

  8. c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)

    最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享 ...

  9. 快递信息管理系统源代码c++_学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生 ...

  10. c语言程序设计课程设计学生信息管理系统,C语言程序设计课程设计报告----学生信息管理系统.doc...

    河南理工大学计算机学院 <C语言程序设计>课程设计报告 题目: 学生信息管理系统 专业: 计算机科学与技术 班级: 计算机XX班 学号: 311009033232 姓名: ***** 日期 ...

最新文章

  1. ios实例开发精品源码文章推荐
  2. python课程设计报告总结-上海python课程设计报告数据处理
  3. 每天一道LeetCode-----根据中序遍历和后序遍历重构二叉树
  4. can't load apple.laf.AquaLookAndFeel (Ant in Eclipse can't find it
  5. 关于 NODE.js 并行线程 worker_threads 的使用与详解。
  6. Linux的应用领域
  7. 事务对性能影响_mysql之事务
  8. hibernate详细教程(入门到熟练)
  9. HiJson(Json格式化工具)64位中文版下载 v2.1.2
  10. ios使用theos tweak logify.pl自动hook .h头文件中所有的方法
  11. 【读心术】之微表情——《Lie to me 》摘自百度百科
  12. ota升级 rk3399_Android7.1.2系统OTA升级
  13. 股市投资必修课二十三--增长的导向
  14. android打印机没反应了,使用蓝牙打印机在Android中打印不起作用
  15. [SOLVED]Manjaro内核更新后,Nvidia驱动无法链接的问题
  16. KL散度和交叉熵的对比介绍
  17. I4mc-deep: 利用具有化学特性的深度学习方法,对 n4- 甲基胞嘧啶位点进行智能预测
  18. C++:error C2228: left of '.str' must have class/struct/union
  19. LeetCode:26
  20. html5抓鱼游戏,捉鱼幼儿园小班的游戏方案

热门文章

  1. google 图片搜索API
  2. matlab实现对图像的简单幻方置乱
  3. ARM(ARM处理器) x64和x86
  4. 安全驾驶-调整后视镜(六)
  5. 《亡灵序曲》各版本收集
  6. 如何防范计算机安全,计算机安全风险及防范措施
  7. 关于重命名C盘User文件夹内用户名的心得
  8. Python数据分析师使用低代码Streamlit实现Web数据可视化方法——Plotly可视化基础篇
  9. 【cpu如何超频及cpu超频作用】
  10. java获取method_从Method中获取完整类名和方法名