您的位置:首页 > 编程语言 > C语言/C++

C语言创建简单的学生成绩管理系统

2020-02-02 07:29 621 查看

C语言创建一个简单的学生成绩管理系统

链表实现

实现输入、排序、统计、打印及存入文件等功能。
先写main函数菜单,把要完成的功能添加上去

int main()
{
system("color F1");
int sl;
char file[8]={'\0'};
char Dele[8]={'\0'};
StudentsList *L;
L=(StudentsList*)malloc(sizeof(StudentsList));
InitStudentsList(L);
do{
start:printf("菜单\n");
printf("创建学生成绩单...1\n打印学生列表...2\n统计数据...3\n删除学生...4\n保存并退出...0\n");
scanf("%d",&sl);
switch(sl){
case 0:printf("请输入文件名:");scanf("%s",file);SaveStudentsList(L,file);system("pause");system("cls");exit(0);
case 1:CreateStudentsArray(L);system("pause");system("cls");break;
case 2:PrintStudentsList(L);system("pause");system("cls");break;
case 3:Statistic(L);system("pause");system("cls");break;
case 4:printf("\n请输入需要删除的学生姓名:");scanf("%s",Dele);DeleteStudent(L,Dele);printf("已将%s从列表中删除\n",Dele);system("pause");system("cls");break;
default:goto start;
}
}while(1);
}

下面是头文件及宏定义

#define _CRT_SECURE_NO_WARNINGS
#define MAX_GRADE 100
#define MIN_GRADE 0
#define SIZE 10
#define goon 1
#define stop 0
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/“#define _CRT_SECURE_NO_WARNINGS”这一行在VS2019上运行的话必须添加,不然不能运行,在VC++6.0或VS2010上运行如果报错的话请删除。/

这个程序要用到strcmp、strcpy字符串处理函数,因此需要添加<string.h>头文件
动态分配函数在<stdlib.h>里,这个是C标准库头文件,<malloc.h>不是C标准库头文件,在某些编译器上可能会出错。

下面是结构体定义,借鉴了C++的语法,我把一些函数写进结构体了。

typedef struct studentslist{
char Name[8];
char ID_number[10];
int Grade_m;
int Grade_e;
struct studentslist* next;
void studentlist()
{
int i;
for(i=0;i<8;i++)
{
Name[i]='\0';
ID_number[i]='\0';
}
}
void input_name()
{
printf("请输入该学生的姓名:");
scanf("%s",Name);
}
void input_id()
{
printf("请输入%s的学号",Name);
scanf("%s",ID_number);
}
void input_grade()
{
int temp,flag=1;
do
{
printf("请输入%s的高数成绩:",Name);
scanf("%d",&temp);
if(temp<MIN_GRADE||temp>MAX_GRADE)
{
flag=0;
printf("请重新输入在0-100的成绩\n");
continue;
}
flag=1;
Grade_m=temp;
}while(flag==0);
do
{
printf("请输入%s的英语成绩:",Name);
scanf("%d",&temp);
if(temp<MIN_GRADE||temp>MAX_GRADE)
{
flag=0;
printf("请重新输入在0-100的成绩\n");
continue;
}
flag=1;
}while(flag==0);
Grade_e=temp;
}
}StudentsList,*SL;

下面是初始化函数

void InitStudentsList(StudentsList *L)
{
strcpy(L->Name,"头结点");
strcpy(L->ID_number,"0000000000");
L->Grade_m=MAX_GRADE;
L->Grade_e=MAX_GRADE;
L->next=NULL;
}

接下来是输入学生以创建列表的函数

SL InputStudents()
{
int i;
SL p=(StudentsList*)malloc(sizeof(StudentsList));
p->input_name();
p->input_id();
p->input_grade();
p->next=NULL;
return p;
}
int check_order(StudentsList *a,StudentsList *b)//这个函数用来比较两个学生结点的学号大小
{
if(a->next==NULL){
return stop;
}
else if(a->next!=NULL){
if((strcmp(a->ID_number,b->ID_number)<=0)&&(strcmp(a->next->ID_number,b->ID_number)>0)){
return stop;
}
else{
return goon;
}
}
}
void InsertStudents(SL t,SL b)//这个函数用来插入新的学生结点
{
if(t->next==NULL){
t->next=b;
}
else if(t->next!=NULL){
b->next=t->next;
t->next=b;
}
}
void CreateStudentsArray(StudentsList *L)
{
int i, Students_Number;
printf("请输入学生的人数:");
scanf("%d", &Students_Number);
SL* m = (SL*)malloc(Students_Number * sizeof(SL));
for (i = 0; i < Students_Number; i++) {
m[i]=InputStudents();
}
for(i=0;i<Students_Number;i++){
SL t=L;
while(check_order(t,m[i])==goon){
t=t->next;
}
if(check_order(t,m[i])==stop){
InsertStudents(t,m[i]);
}
}
}

打印学生列表函数

void PrintStudentsList(StudentsList *L)
{
SL p;
p=L->next;
if(p==NULL){
printf("出错!此列表为空!\n");
return ;
}
while(p!=NULL){
printf("姓名:%s 学号:%s 高数:%d 英语:%d\n",p->Name,p->ID_number,p->Grade_m,p->Grade_e);
p=p->next;
}
}

统计最高分、最低分、人数,计算平均分函数

void DeleteStudent(StudentsList *L,char Dele[])
{
SL d;
d=L;
while(d->next!=NULL)
{
if(strcmp(d->next->Name,Dele)==0){
if(d->next->next==NULL){
free(d->next);
}
else if(d->next->next!=NULL){
d->next=d->next->next;
}
break;
}
d=d->next;
}
}

存入文件函数

void SaveStudentsList(StudentsList *L,char str[])
{
char Enter='\n';
FILE *fp;
if((fp = fopen(str,"w"))==NULL){
printf("打开文件出错!\n");
return ;
}
SL p;
p=L->next;
while(p!=NULL){
fprintf(fp,"姓名:%s 学号:%s 高数:%d 英语:%d%c",p->Name,p->ID_number,p->Grade_m,p->Grade_e,Enter);
p=p->next;
}
fclose(fp);
printf("保存完成\n");
}
  • 点赞 5
  • 收藏
  • 分享
  • 文章举报
某科学的烫烫烫 发布了21 篇原创文章 · 获赞 43 · 访问量 3287 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: