课设——C语言学生成绩管理系统
介绍
相信许多同学在大学期间,学习计算机相关课程的时候,都有一个令人头疼的问题——课程设计。那么本片文章就详细的分享一个用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语言学生成绩管理系统相关推荐
- C语言 课设 最新版 学生成绩管理系统
运行效果 main.cpp /* ===================================成绩管理程序===================================* 注意:* ...
- java课设--简单的学生成绩管理系统(可视化界面,连接MYsql数据库)
1.登录界面 package kk;import java.awt.BorderLayout; import java.awt.EventQueue;import javax.swing.JFrame ...
- C语言学生成绩管理系统源代码
分享:C语言学生成绩管理系统设计 <C语言程序设计>实训报告 点击查看 ----> C语言学生成绩管理系统(课程设计报告书) 扫描下方公众号,发送 成绩系统 4个字,获取下载源码. ...
- c语言按给定成绩查询,C语言学生成绩管理系统(简易版)
#include #include #include int readstudents(struct students stu[]); //读取学生信息 int readsexcode(struct ...
- c语言成绩管理系统报告书,C语言学生成绩管理系统实验报告
<C语言学生成绩管理系统实验报告>由会员分享,可在线阅读,更多相关<C语言学生成绩管理系统实验报告(22页珍藏版)>请在人人文库网上搜索. 1.学生成绩管理系统实验报告实验名称 ...
- 用C语言学生成绩数据库排序功能设计,[c语言学生成绩管理系统]C语言学生成绩管理系统实验报告...
篇一 : C语言学生成绩管理系统实验报告 实 验 四:结构体(6学时) 实验目的: 1.更加灵活的使用数组作为函数参数: 2.初步掌握开发一个小型实用系统的基本方法: 3.初步掌握书写程序设计开发文档 ...
- C语言学生成绩管理系统(课程设计报告书)
今天再跟大家分享一份课程设计报告:C语言学生成绩管理系统源码 程序设计组成框图: #include<stdio.h> #include<conio.h> #include< ...
- c语言成绩管理系统教程,C语言学生成绩管理系统教程.doc
C语言学生成绩管理系统教程 实训报告 题 目: 学生成绩管理系统院 系: 专 业: 姓 名: 学 号: 指导教师: 日 期: 目录 TOC \o "1-3" \h \z \u HY ...
- C语言 学生成绩管理系统 带登录界面
C语言 学生成绩管理系统 带登录界面 C语言课程设计 思路 部分展示 代码片段 C语言课程设计 先上要求: 思路 为了方便简单,直接利用结构体数组来存储学生学生,最后根据功能编写函数即可. 部分展示 ...
- c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)
复制时运行出错请看这里:c语言学生成绩管理系统 添加公众号回复 学管 免费获取源代码 代做可私聊 c语言学生成绩管理系统(增.删.查.改.排序.分析优秀及格率等)详细内容 一.功能描述 实现学生基本信 ...
最新文章
- Nosql简介 Redis,Memchche,MongoDb的区别
- C语言 递归实现辗转相除法 和 辗转相减法
- PS2019进阶笔记(二)
- 外存中的对换区和文件区
- oracle颜色,oracle - Oracle SQL Developer - 如何使用颜色显示百分比(非数字) - 堆栈内存溢出...
- eclipse java读取文件_在eclipse完成对Java_web项目里面资源文件的读取
- 计算机怎么登录用户名和密码忘了怎么办,如果我忘记了计算机的用户名和密码,该怎么办...
- 基于 Flink、ClickHouse 的舆情分析系统:系统详细设计说明书
- 淘宝客返利网的实现方法
- 苹果设备验证是否正品
- Untiy InputSystem(一) 新旧API对比
- PTA 7-1 修理牧场
- 美业选择会员系统的原因
- byte[]与String互转对象和JSON相互转
- springboot 微信太阳码_springboot教务管理系统+微信小程序云开发
- [oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB
- 三元损失“In Defense of the Triplet Loss for Person Re-Identification”
- LATEX 排版问题记录
- 企业微信如何设置文件权限?
- [网络篇]ESP8266-SDK教程(三)之TCP通信Server-Client