介绍
相信许多同学在大学期间,学习计算机相关课程的时候,都有一个令人头疼的问题——课程设计。那么本片文章就详细的分享一个用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/1u9fQKzVYo-LcodWqw4LSaw?pwd=1234
提取码:1234文章来源:https://www.toymoban.com/news/detail-501512.html
希望帮助到的同学给个三连呀~文章来源地址https://www.toymoban.com/news/detail-501512.html
到了这里,关于课设——C语言学生成绩管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!