介绍

相信许多同学在大学期间,学习计算机相关课程的时候,都有一个令人头疼的问题——课程设计。那么本片文章就详细的分享一个用C语言实现一个简单学生成绩管理系统,供同学们学习和参考(文章最后会附上源程序)。

项目分析

1.建立一张学生成绩表,每个学生包含 学号、姓名、性别、语文、数学、英语、平均分

2.将表中所有信息按平均分降序排列。

3.按学号查找某学生所有成绩。

4.能够实现某学生的成绩插入和删除

5.实现文件操作,程序退出时将学生成绩保存在studen_grad.txt文件中;程序开始时,能够从student_grad.txt文件中加载已有的学生成绩信息。

整题框架

包含文件:

1.main函数文件(main.c),主程序整题框架

2.学生成绩管理函数文件(score managemen.c),用来实现各接口函数

3.学生成绩管理头文件(score managemen.h),用来定义和声明函数。

main.c文件

主函数框架

int main()
{Slist* List = ListInit();ListLoad(List);int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch(input){case 1:ListPushBack(List);break;case 2:ListDelet(List);case 3:ListPrint(List);break;case 4:ListSort(List);break;case 5:ListSearch(List);break;case 0:ListSave(List);printf("保存成功,退出!\n");break;}}while(input);return 0;
}

menu()函数

void menu()
{printf("*****************************************\n");printf("******      学生成绩管理系统     ********\n");printf("******  1.增加           2.删除  ********\n");printf("******  3.显示           4.排序  ********\n");printf("******  5.查找           0.退出  ********\n");printf("*****************************************\n");
}

score managemen.h文件

结构体链表

//双向循环链表 存储学生信息
typedef struct ScoreList
{char number[20];char name[20];char sex[5];int chinese;int math;int english;float average;struct ScoreList* next;struct ScoreList* prev;}Slist;

接口函数声明

Slist* ListInit();//链表初始化
void ListPushBack(Slist* phead);//链表尾部插入学生成绩
void ListDelet(Slist* phead);//按学号删除
void ListSearch(Slist* phead);//按学号查找
void ListPrint(Slist* phead);//打印链表
void ListSort(Slist* phead);//排序(平均分降序)
void ListSave(Slist* phead);//文件保存
void ListLoad(Slist* phead);//加载

scor managem.c文件

Slist* ListInit() 链表初始化函数

Slist* ListInit()
{Slist* phead = (Slist*)malloc(sizeof(Slist));phead->next = phead;phead->prev = phead;return phead;
}

void ListPushBack(Slist* phead)  链表尾部插入学生成绩

//链表尾部插入
void ListPushBack(Slist* phead)
{system("cls");assert(phead);Slist* newnode = (Slist*)malloc(sizeof(Slist));printf("请输入学号:");scanf("%s",newnode->number);printf("请输入姓名:");scanf("%s",newnode->name);printf("请输入性别:");scanf("%s",newnode->sex);printf("请输入语文成绩:");scanf("%d",&(newnode->chinese));printf("请输入数学成绩:");scanf("%d",&(newnode->math));printf("请输入英语成绩:");scanf("%d",&(newnode->english));newnode->average =(float)(newnode->chinese + newnode->math + newnode->english)/3;Slist* tailnode = phead->prev;tailnode->next = newnode;newnode->prev = tailnode;newnode->next = phead;phead->prev = newnode;printf("添加成功\n");
}

void ListDelet(Slist* phead)  按学号链表删除

//按学号删除
void ListDelet(Slist* phead)
{assert(phead);system("cls");char number[20];//存储要删除学生的学号printf("请输入要删除的学号:>");scanf("%s",number);Slist* cur = phead->next;while(cur != phead){if(strcmp(number,cur->number) == 0)//判断成绩表中是否存在该学生学号{Slist* nextnode = cur->next;Slist* prevnode = cur->prev;free(cur);prevnode->next = nextnode;nextnode->prev = prevnode;printf("删除成功!\n");return;}cur = cur->next;}printf("该学生不存在\n");}

void ListSearch(Slist* phead)   按学号查找

void ListSearch(Slist* phead)
{assert(phead);system("cls");char number[20];printf("请输入学号:>");scanf("%s",number);Slist* cur = phead->next;while(cur != phead){if(strcmp(number,cur->number) == 0) //判断学生是否存在{printf("姓名:%s  性别:%s  语文:%d  数学:%d  英语:%d  平均分:%f\n",cur->name,cur->sex,cur->chinese,cur->math,cur->english,cur->average);return;}cur = cur->next;}printf("没有找到该学生\n");
}

void ListPrint(Slist* phead);//打印链表

//链表打印
void ListPrint(Slist* phead)
{assert(phead);system("cls");printf("%-10s\t%-8s\t%-5s\t%-5s\t%-5s\t%-5s\t%-10s\n","学号","姓名","性别","语文","数学","英语","平均分");Slist* cur = phead->next;while(cur != phead){printf("%-10s\t%-8s\t%-5s\t%-5d\t%-5d\t%-5d\t%-10.3f\n",cur->number,cur->name,cur->sex,cur->chinese,cur->math,cur->english,cur->average);cur = cur->next;}
}

void ListSort(Slist* phead);//排序(平均分降序)

//按平均分降序
void ListSort(Slist* phead)
{assert(phead);system("cls");int count = 0;//记录链表长度Slist* cur = phead->next;while(cur != phead){count++;cur = cur->next;}int i = 0;int j = 0;for(i = 0;i < count;i++)//冒泡排序{Slist* prevnode = phead;Slist* curnode = prevnode->next;Slist* nextnode = curnode->next;Slist* tailnode = nextnode->next;for(j = 0;j < count-i;j++){if(curnode->average < nextnode->average){prevnode->next = nextnode;nextnode->prev = prevnode;curnode->next = tailnode;tailnode->prev = curnode;nextnode->next = curnode;curnode->prev = nextnode;}tailnode = tailnode->next;nextnode = nextnode->next;curnode = curnode->next;prevnode = prevnode->next;}}printf("排序成功!\n");
}

void ListSave(Slist* phead);//文件保存

void ListSave(Slist* phead)
{FILE* fpWrite = fopen("student_grad.txt","w");if(fpWrite == NULL){printf("%s\n",strerror(errno));return;}Slist* cur = phead->next;while(cur != phead){fprintf(fpWrite,"%-10s\t%-8s\t%-5s\t%-5d\t%-5d\t%-5d\t%-10.3f\n",cur->number,cur->name,cur->sex,cur->chinese,cur->math,cur->english,cur->average);cur = cur->next;}fclose(fpWrite);fpWrite = NULL;
}

void ListLoad(Slist* phead);//加载

void ListLoad(Slist* phead)
{FILE* fpRead = fopen("student_grad.txt","r");while(1){Slist* newnode = (Slist*)malloc(sizeof(Slist));if(fscanf(fpRead,"%s\t%s\t%s\t%d\t%d\t%d\t%f\n",newnode->number,newnode->name,newnode->sex,&(newnode->chinese),&(newnode->math),&(newnode->english),&(newnode->average)) != EOF)//判断是否读取完{Slist* tailnode = phead->prev;tailnode->next = newnode;newnode->prev = tailnode;newnode->next = phead;phead->prev = newnode;}else{break;}}}

源程序

链接:https://pan.baidu.com/s/1gppTuGUD6CD0j78YJYf8-g?pwd=1234 
提取码:1234

希望帮助到的同学给个三连呀~

课设——C语言学生成绩管理系统相关推荐

  1. C语言 课设 最新版 学生成绩管理系统

    运行效果 main.cpp /* ===================================成绩管理程序===================================* 注意:* ...

  2. java课设--简单的学生成绩管理系统(可视化界面,连接MYsql数据库)

    1.登录界面 package kk;import java.awt.BorderLayout; import java.awt.EventQueue;import javax.swing.JFrame ...

  3. C语言学生成绩管理系统源代码

    分享:C语言学生成绩管理系统设计 <C语言程序设计>实训报告 点击查看 ----> C语言学生成绩管理系统(课程设计报告书) 扫描下方公众号,发送 成绩系统 4个字,获取下载源码. ...

  4. c语言按给定成绩查询,C语言学生成绩管理系统(简易版)

    #include #include #include int readstudents(struct students stu[]); //读取学生信息 int readsexcode(struct ...

  5. c语言成绩管理系统报告书,C语言学生成绩管理系统实验报告

    <C语言学生成绩管理系统实验报告>由会员分享,可在线阅读,更多相关<C语言学生成绩管理系统实验报告(22页珍藏版)>请在人人文库网上搜索. 1.学生成绩管理系统实验报告实验名称 ...

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

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

  7. C语言学生成绩管理系统(课程设计报告书)

    今天再跟大家分享一份课程设计报告:C语言学生成绩管理系统源码 程序设计组成框图: #include<stdio.h> #include<conio.h> #include< ...

  8. c语言成绩管理系统教程,C语言学生成绩管理系统教程.doc

    C语言学生成绩管理系统教程 实训报告 题 目: 学生成绩管理系统院 系: 专 业: 姓 名: 学 号: 指导教师: 日 期: 目录 TOC \o "1-3" \h \z \u HY ...

  9. C语言 学生成绩管理系统 带登录界面

    C语言 学生成绩管理系统 带登录界面 C语言课程设计 思路 部分展示 代码片段 C语言课程设计 先上要求: 思路 为了方便简单,直接利用结构体数组来存储学生学生,最后根据功能编写函数即可. 部分展示 ...

  10. c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)

    复制时运行出错请看这里:c语言学生成绩管理系统 添加公众号回复 学管 免费获取源代码 代做可私聊 c语言学生成绩管理系统(增.删.查.改.排序.分析优秀及格率等)详细内容 一.功能描述 实现学生基本信 ...

最新文章

  1. Nosql简介 Redis,Memchche,MongoDb的区别
  2. C语言 递归实现辗转相除法 和 辗转相减法
  3. PS2019进阶笔记(二)
  4. 外存中的对换区和文件区
  5. oracle颜色,oracle - Oracle SQL Developer - 如何使用颜色显示百分比(非数字) - 堆栈内存溢出...
  6. eclipse java读取文件_在eclipse完成对Java_web项目里面资源文件的读取
  7. 计算机怎么登录用户名和密码忘了怎么办,如果我忘记了计算机的用户名和密码,该怎么办...
  8. 基于 Flink、ClickHouse 的舆情分析系统:系统详细设计说明书
  9. 淘宝客返利网的实现方法
  10. 苹果设备验证是否正品
  11. Untiy InputSystem(一) 新旧API对比
  12. PTA 7-1 修理牧场
  13. 美业选择会员系统的原因
  14. byte[]与String互转对象和JSON相互转
  15. springboot 微信太阳码_springboot教务管理系统+微信小程序云开发
  16. [oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB
  17. 三元损失“In Defense of the Triplet Loss for Person Re-Identification”
  18. LATEX 排版问题记录
  19. 企业微信如何设置文件权限?
  20. [网络篇]ESP8266-SDK教程(三)之TCP通信Server-Client

热门文章

  1. JDK 8和Java 8的下载与安装
  2. 抓取Amazon产品评论的神器
  3. robocopy 备份_备份双雄!Robocopy和XXCOPY使用详解
  4. 专利申请模板,包含实用新型专利和发明专利模板
  5. Visio2016下载激活破解
  6. 2021年下半年软考-网络工程师答案及解析(中级)
  7. 摸头GIF在线生成工具 附源码
  8. 关于dell电脑没有声音
  9. 第二章 过程域——技术解决方案
  10. input datetime-local 时间控件精确到秒