当前位置: 首页 > news >正文

课设——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

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


http://www.taodudu.cc/news/show-1944751.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • c语言学生成绩管理系统总结
  • c语言课程设计学生成绩管理系统作业,C语言学生成绩管理系统课程设计word版
  • 学生成绩管理系统简单c语言源代码,c语言学生成绩管理系统源代码
  • c语言编写成绩管理系统代码,C语言学生成绩管理系统源代码
  • 基于c语言的学生成绩管理系统论文,C语言学生成绩管理系统论文
  • C语言实现学生成绩管理系统
  • c语言 学生成绩管理系统
  • C语言学生成绩管理系统(综合项目)
  • 学生成绩管理系统(C语言)
  • 在线反编译
  • swf反编译及修改
  • swf反编译为as
  • 如何防止SWF文件被反编译 如何防止SWF文件被反编译(2)
  • swf文件的反编译或着flash文件的反编译
  • swc反编译工具_ffdec 10.0|ffdec(flash反编译工具)下载v10.0.0官方最新版 - 欧普软件下载...
  • swc反编译工具_Flash反编译工具下载_Flash反编译工具(JPEXS Free Flash Decompiler)v11.3中文版-这家软件站...
  • swc反编译工具_JPEXS Free Flash Decompiler(Flash反编译工具)v11.3.0 中文免费版-ucbug软件站...
  • flash 反编译资料
  • Sothink SWF Decompiler 反编译swf
  • 如何防止SWF文件被反编译
  • SWF反编译工具
  • 使用swix反编译swf文件修改版权
  • 反编译swf工具
  • SWF文件反编译调试记录
  • 反编译swf
  • SWF 学习笔记 ——《如何在内存中提取出加密的SWF》
  • swf文件的反编译入门
  • 用JPEXS软件实现swf反编译-逆向调试方法
  • 把swf反编译成fla的几种方法
  • cognos oracle sql,Cognos联接Oracle数据库