博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学生成绩管理系统
阅读量:671 次
发布时间:2019-03-15

本文共 8404 字,大约阅读时间需要 28 分钟。

概要

因为目前工作的需要,看着C Primer Plus把C语言粗略的过了一遍。为了巩固自己的知识,故试着写了这个学生成绩管理系统

此处感谢大佬"渣渣的夏天"的文章

声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出

学生成绩系统的主要功能

  • 录入学生成绩和个人基本信息
  • 将学生的信息打印
  • 将学生的信息保存到指定文件下
  • 记录已经录入信息的学生个数
  • 查找学生信息
  • 修改学生信息
  • 修改学生信息

实现思路

  • 利用while循环一直获取用户输入
  • 利用switch来对用户的输入进行判断,并进入相应的函数中
  • 构建学生信息结构体,构建链表来保存学生信息和指针信息
  • 在读取学生信息的时候,通过要将数据的类型转化,存储到字符型数组中

代码实现

  • 显示主菜单
void show_menu(){
printf("*********************************************************\n"); printf("*\t 学生管理系统\t\t\t\t*\n"); printf("*********************************************************\n"); printf("*\t\t1.录入学生信息\t\t\t\t*\n"); printf("*\t\t2.打印学生信息\t\t\t\t*\n"); printf("*\t\t3.保存学生信息\t\t\t\t*\n"); printf("*\t\t4.读取学生信息\t\t\t\t*\n"); printf("*\t\t5.已录入学生个数\t\t\t*\n"); printf("*\t\t6.查找学生信息 \t\t\t*\n"); printf("*\t\t7.修改学生信息 \t\t\t*\n"); printf("*\t\t8.删除学生信息 \t\t\t*\n"); printf("*\n"); printf("*返回主目录\n"); printf("*********************************************************\n"); printf("\n请选择功能\n");}
  • main函数
//通过while循环一直读取用户输入,并通过switch来进行相应的选项处理int main(){
while(1){
int i; show_menu(); scanf("%d",&i); switch (i){
case 1: addinfo(); break; case 2: PrintInfo(); break; case 3: savestuent(); break; case 4: ReadStudentInfo(); break; case 5: CountItem(); break; case 6: FindStudent(); break; case 7: ChangeStudent(); break; case 8: DelStudent(); break; default : printf("输入错误\n\n"); } }}
  • 录入学生信息
//1.录入信息void addinfo(){
//创建一个人,在堆中分配内存 Node *pnew = (Node *)malloc(sizeof(Node)); //指针指向下一个为空 pnew->next = NULL; //遍历链表 Node *q =head; while(head !=NULL &&q->next !=NULL){
q=q->next; } //把结点查到尾结点 if(head == NULL){
head=pnew; }else{
q->next = pnew; } //录入信息 printf("请输入学号\n"); scanf("%ld",&pnew->stu.num); printf("请输入姓名\n"); scanf("%s",pnew->stu.name); printf("请输入性别\n"); scanf("%s",pnew->stu.sex); printf("请输入数学\n"); scanf("%d",&pnew->stu.maths); printf("请输入英语\n"); scanf("%d",&pnew->stu.english); //总分 pnew->stu.total = pnew->stu.maths+pnew->stu.english; printf("学生信息录入成功\n\n");}
  • 打印学生信息
//2.打印学生信息void PrintInfo(){
Node *p=head; //头指针 if(p==NULL){
printf("学生信息不存在,请录入信息\n"); }else {
printf("*********************************************************\n"); printf("*\t\t学生信息表\t\t\t\t*\n"); printf("*\t学号\t姓名\t性别\t数学\t英语\t总成绩\t*\n"); while(p!=NULL){
printf("*\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total ); p=p->next;//下一个结点 } printf("*********************************************************\n\n"); }}
  • 保存学生信息
//3.保存学生信息void savestuent(){
int i; //打开文件 FILE *fd = fopen(FILE_PATH,"w"); if(fd == NULL){
printf("打开文件失败\n"); return ; } fprintf(fd,"\t学号\t姓名\t性别\t数学\t英语\t总成绩\t\n"); //写入数据 Node *p=head; while (p != NULL) {
//把链表数据写入文件中 fprintf(fd,"\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total ); p=p->next; //下一个结点 } fclose(fd); //关闭文件 printf("保存成功\n"); }
  • 读取学生信息
//4.读取学生信息void ReadStudentInfo(){
//只读打开文件 FILE *fd=fopen(FILE_PATH,"r"); if(fd == NULL){
printf("打开文件失败!\n"); exit(1); } Node* pNewNode ; //创建一个学生的节点 Node *P=(Node *)malloc(sizeof(Node)); P->next = NULL; head=P; //建立链表 //逐个单词读取文本内容 char str[200]; int i =0; //读取文件 while(fscanf(fd,"%s",str) != EOF){
//读文件 //单词不是*或者空的时候,进行赋值 if (strcmp(str,"*")&&str!=NULL) {
switch(i){
case 0: P->stu.num=atoi(str);break; case 1: strcpy(P->stu.name,str);break; case 2: strcpy(P->stu.sex,str);break; case 3: P->stu.maths=atoi(str);break; case 4: P->stu.english=atoi(str);break; case 5: P->stu.total=atoi(str);break; default: pNewNode= (Node*)malloc(sizeof(Node)); pNewNode->next=NULL; P->next=pNewNode; P->stu.num=atoi(str); i=0; break; } i++; } } printf("读取信息成功\n\n"); //打印结果 PrintInfo();};
  • 已录入学生个数
//5.读取学生个数void CountItem(){
int count = 0; Node *p = head; while(p !=NULL){
count++; p=p->next; } printf("学生总人数为:%d\n\n",count);}
  • 查找学生信息
//6.查找学生信息bool FindStudent(){
//通过学生姓名来查找 bool Showhead=false; //对表头进行展示 bool isfind=false; //记录找到学生信息 Node *p=head; char str[8]; printf("请输入学生的姓名:\n"); scanf("%s",str); while(p != NULL){
//字符串比较 if (strcmp(str,p->stu.name) == 0){
if(!Showhead){
printf ("*********************************************************\n ") ; printf("*\t\t学生信息表\t\t\t\t*\n"); printf("*\t学号\t姓名\t性别\t数学\t英语\t总成绩\t*\n"); Showhead=true; } printf("*\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total); isfind =true; printf("*********************************************************\n\n"); } p=p->next;//下一个结点 } if(!isfind){
printf("没有找到该学生信息"); return false; }}
  • 修改学生信息
//7.修改学生信息void ChangeStudent(){
Node *p; int num; bool Showhead=false; //对表头进行展示 bool isFindSTU=false; //记录找到学生信息 printf("请输入要修改的学生学号\n"); scanf("%d",&num); p=head; while(p!=NULL){
if (num==p->stu.num) {
if(!Showhead){
printf("*********************************************************\n"); printf("*\t\t学生信息表\t\t\t\t*\n"); printf("*\t学号\t姓名\t性别\t数学\t英语\t总成绩\t*\n"); Showhead=true; } printf("*\t%ld\t%s\t%s\t%d\t%d\t%d\n\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.maths, p->stu.english, p->stu.total); //此次获取修改的信息 printf("请输入学号:\n"); scanf("%ld",&p->stu.num); printf("请输入姓名:\n"); scanf("%s",p->stu.name); printf("请输入性别:\n"); scanf("%s",p->stu.sex); printf("请输入数学:\n"); scanf("%d",&p->stu.maths); printf("请输入英语:\n"); scanf("%d",&p->stu.english); //总分 p->stu.total = p->stu.maths+p->stu.english; isFindSTU=true; } p=p->next; } if(!isFindSTU) printf("学号输入有误\n\n"); savestuent(); //调用保存学生信息函数}
  • 删除学生信息
//8.删除学生信息void DelStudent(){
Node *p,*delp; int num; printf("请输入要删除的学生学号\n"); scanf("%d",&num); p=head; while(p!=NULL){
if (num==p->stu.num) {
//删除节点为头结点 if(p==head) head=p->next; //要删除的结点为尾节点 else if(p->next==NULL){
p=delp; p->next=NULL; } //删除节点为中间节点 else {
delp->next = p->next; } printf("删除成功,请记得保存。\n\n"); } delp=p; p=p->next; }}

结果图

  • 主界面

    在这里插入图片描述

  • 录入信息

    在这里插入图片描述

  • 打印信息

    在这里插入图片描述

  • 保存读取信息

    在这里插入图片描述

  • 已经录入学生个数

    在这里插入图片描述

  • 查找学生信息

    在这里插入图片描述

  • 修改学生信息

    在这里插入图片描述
    学生信息已被修改
    在这里插入图片描述

  • 删除学生信息

    在这里插入图片描述
    学生信息已被删除
    在这里插入图片描述

而塞过 2021-3-22

关于我:一个就要进入互联网,经历社会毒打的99小伙

欢迎各位指出问题,一起探讨

转载地址:http://bjgmz.baihongyu.com/

你可能感兴趣的文章