《学生成绩管理系统》
课程设计报告
专 业: 信息科学与工程学院
班 级: 电气信息类0916班
姓 名: 曹坤
指导教师: 汤哲
学 号: 02
课程设计报告
一、 课程设计题目
学生成绩管理系统
1、需要处理的基础数据
学生基本信息:如班级、学号、姓名、性别、年龄等。
学生选修课程的基本信息:课程编号、课程名称、学分、考试成绩、平时成绩、综合成绩(考试成绩*+平时成绩*)等。
主菜单
2、系统的基本功能
数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息;
数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其选修课程信息;
数据的插入:插入某个学生信息;
数据的查询:如按学号查询、按姓名查询等;
数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息;
平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息;
列出不及格学生清单(学号、姓名、不及格的课程和成绩)。
考虑用文件把数据保存起来(可选)。
3、链表
struct stu /*定义学生基本信息结构体*/
{
int i; /*以输入的顺序来确定的学生序号*/
char num[11];
char classnum[5];
char name[128];
char sex[32];
int age;
float ave;
struct stu *next;
};
int n=0; /*学生人数*/
struct stu *head=0;
struct stu1 /*定义学生选修课信息结构体*/
{
char lessonnum[11];
char lessonname[256];
float score;
float testgrade;
float commongrade;
float grade;
struct stu1 *next;
};
int m;
struct stu1 *a[max_num] ;/*定义一个指针数组来记住课程链表地址*/
/*---------------------- 数据的录入程序 -----------------------*/
void create(void) /*建立学生基本信息链表*/
{
n=0;
struct stu *p1,*p2;
char ch,ch1;
struct stu1 *create1(void);
do
{
n=n+1;
a[n]=0;
system("cls");
p1=(struct stu *)malloc(LEN);
printf("\n学号:");
scanf("%s",p1->num);
printf("\n班级:");
scanf("%s",p1->classnum);
printf("\n姓名:");
scanf("%s",p1->name) ;
printf("\n性别:");
scanf("%s",p1->sex);
printf("\n年龄:");
scanf("%d",&p1->age);
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
printf("\n是否输入选修课信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch1=getchar();
if(ch1=='y'||ch1=='Y')
a[n]=create1(); /*根据序号来记忆课程链表地址*/
p1->i=n;
system("cls");
printf("\n是否继续输入另一学生信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
}
struct stu1 *create1(void) /*建立课程链表*/
{
m=0;
struct stu1 *p1,*p2;
char ch;
struct stu1 *head=0;
do
{
m=m+1;
system("cls");
p1=(struct stu1 *)malloc(LEM);
printf("\n课程编号:");
scanf("%s",p1->lessonnum);
printf("\n课程名称:");
scanf("%s",p1->lessonname);
printf("\n学分:");
scanf("%f",&p1->score);
printf("\n考试成绩:");
scanf("%f",&p1->testgrade);
printf("\n平时成绩:");
scanf("%f",&p1->commongrade);
p1->grade=p1->testgrade*+p1->commongrade*;
printf("\n综合成绩:%-6.1f",p1->grade);
if(m==1)head=p1;
else p2->next=p1;
p2=p1;
printf("\n是否继续输入另一课程信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
return(head);
}
二、 设计思路
界面:界面的显示由循环语句和switch语句来控制完成。
数据的录入:运用链表进行数据的存储,由于要录入的数据有两种即学生的基本信息和学生的选修课程信息,本系统采用两个链表分别存储数据,采用数组将两个链表联系起来,运用循环语句和判断语句来进行数据的录入。作者感到本功能设计中的难点在于将两个链表联系起来,解决方案是采用一个指针数组来将第二个链表中每个节点地址存储起来,进而将两个链表联系起来。
信息的修改:本系统采用的是按学号查找信息,系统采用一个由判断语句和循环语句构成的查询函数struct stu *findnum(void)来提供信息存储地址;再按照地址来进行修改,其中采用switch语句和循环语句来控制使系统能够提供选择修改的功能。在这一功能的设计中,作者感到课程信息的修改中的添加课程信息功能是一个难点,解决方案是按插入方案来进行设计。
插入信息:本系统采用的是按学号顺序来进行插入的,在这一功能的设计中,首先在开辟一个结构体空间将插入学生的信息存储于其中,在采用判断语句和循环语句来查找该条信息应该插入位置的地址,将上一结点的下行指针指向本结点,再将该节点的下行指针指向下一个结点从而达到插入信息的目的。在这一功能的设计中作者感到
插入的具体算法是个难点,本系统采用的教材书本上的方法。
查询信息:本功能实现是调用struct stu *findnum(void)函数查找该条信息的地址,然后再采用for循环进行信息的输出,本功能的实现比较简单,难点在于对函数的调用的灵活运用。
删除信息:系统采用按学号删除的方案,在这一功能的设计中我没有采用直接调用struct stu *findnum(void)函数,而是又重写查找地址程序,
这是出于考虑系统功能的更好实现而采用的举措。具体删除算法采用该节点上一个结点的下行指针直接指向该结点下一个结点从而达到删除该结点的目的。在此功能的设计中,本作者感到难点不在于算法而在于思维设计的是否缜密。
计算平均成绩:本功能的实现需要首先计算各个学生的平均成绩,再按照平均成绩进行排序。这
两个过程的设计排序是个难点,因为本系统存储结构为链表,在排序方面较数组有很大区别,在作者看来比较困难,解决方案是运用一个指针型数组将每个结点的地址存在其中,再按照该指针指向的平均成绩来排序数组中的地址,再按照数组中的地址顺序来输出信息,间接达到排序的目的。
不及格学生清单:判断语句和循环语句的结合运用以达到列出清单的目的,本功能的实现不难,难在于准确控制。
三、 系统流程
四、 程序代码
#include<>
#include<>
#include<>
#define LEN sizeof(struct stu)
#define LEM sizeof(struct stu1)
#define max_num 256
struct stu /*定义学生基本信息结构体*/
{
int i; /*以输入的顺序来确定的学生序号*/
char num[11];
char classnum[5];
char name[128];
char sex[32];
int age;
float ave;
struct stu *next;
};
int n=0; /*学生人数*/
struct stu *head=0;
struct stu1 /*定义学生选修课信息结构体*/
{
char lessonnum[11];
char lessonname[256];
float score;
float testgrade;
float commongrade;
float grade;
struct stu1 *next;
};
int m;
struct stu1 *a[max_num] ;/*定义一个指针数组来记住课程链表地址*/
/*---------------------- 数据的录入程序 -------------
----------*/
void create(void) /*建立学生基本信息链表*/
{
n=0;
struct stu *p1,*p2;
char ch,ch1;
struct stu1 *create1(void);
do
{
n=n+1;
a[n]=0;
system("cls");
p1=(struct stu *)malloc(LEN);
printf("\n学号:");
scanf("%s",p1->num);
printf("\n班级:");
scanf("%s",p1->classnum);
printf("\n姓名:");
scanf("%s",p1->name) ;
printf("\n性别:");
scanf("%s",p1->sex);
printf("\n年龄:");
scanf("%d",&p1->age);
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
printf("\n是否输入选修课信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch1=getchar();
if(ch1=='y'||ch1=='Y')
a[n]=create1(); /*根据序号来记忆课程链表地址*/
p1->i=n;
system("cls");
printf("\n是否继续输入另一学生信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
}
struct stu1 *create1(void) /*建立课程链表*/
{
m=0;
struct stu1 *p1,*p2;
char ch;
struct stu1 *head=0;
do
{
m=m+1;
system("cls");
p1=(struct stu1 *)malloc(LEM);
printf("\n课程编号:");
scanf("%s",p1->lessonnum);
printf("\n课程名称:");
scanf("%s",p1->lessonname);
printf("\n学分:");
scanf("%f",&p1->score);
printf("\n考试成绩:");
scanf("%f",&p1->testgrade);
printf("\n平时成绩:");
scanf("%f",&p1->commongrade);
p1->grade=p1->testgrade*+p1->commongrade*;
printf("\n综合成绩:%-6.1f",p1->grade);
if(m==1)head=p1;
else p2->next=p1;
p2=p1;
printf("\n是否继续输入另一课程信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
return(head);
}
/*-----------------------------------------------------------*/
struct stu *findnum(void)
{
char num[11];
struct stu *p1;
struct stu1 *p2;
char c;
printf("\n输入学生学号:");
fflush(stdin);
gets(num);
struct stu *fa;
fa=head;
if(head==0)
{
printf("\nlist null\n");goto end;
}
while(strcmp(fa->num,num)!=0)
{
if(fa->next==0)break;
fa=fa->next;
}
if(strcmp(fa->num,num)==0)return fa;
else printf("%s can't be found!\n",num);
end:
return 0;
}
/*------------------------ 查询信息模块 ----------------------------------*/
void search(void)
{
system("cls");
char ch2;
struct stu *findnum(void);
struct stu *p;
struct stu1 *p1;
p=findnum();
if(p==0)
goto end;
p1=a[p->i];
printf("\n%17s","学号");
printf("%15s","班级");
printf("%16s","姓名");
printf("%15s","性别");
printf("%15s","年龄");
printf("\n%17s",p->num);
printf("%15s",p->classnum);
printf("%16s",p->name) ;
printf("%15s",p->sex);
printf("%15d",p->age);
printf("\n********************************************************************************");
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(;p1!=0;)
{
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
p1=p1->next;
}
end:
printf("\n按任意键退出");
ch2=getchar();
}
/*--------------------------修改模块-------------------------*/
void modify(void)
{
struct stu *findnum(void);
char selmenu,selmenu1;
system("cls");
char ch2;
char ch3;
char ch4;
char ch6;
char ch7;
char ch8;
struct stu *findnum(void);
struct stu *p;
struct stu1 *p1;
struct stu1 *p2;
char lessonno[11];
p=findnum();
if(p==0)
{
printf("\n按任意键退出");
fflush(stdin);
scanf("%c",&ch2);
}
else
{
p1=a[p->i];
printf("\n%17s","学号");
printf("%15s","班级");
printf("%16s","姓名");
printf("%15s","性别");
printf("%15s","年龄");
printf("\n%17s",p->num);
printf("%15s",p->classnum);
printf("%16s",p->name) ;
printf("%15s",p->sex);
printf("%15d",p->age);
printf("\n********************************************************************************");
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(;p1!=0;)
{
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
p1=p1->next;
}
p1=a[p->i];
printf("\n按任意键开始修改");
scanf("%c",&ch2);
do
{
system("cls");
printf("\n\n");
printf("\t\t\t1.修改学号");
printf("\t\t2.修改班级\n");
printf("\t\t\t3.修改姓名");
printf("\t\t4.修改性别\n");
printf("\t\t\t5.修改年龄");
printf("\t\t6.修改选修课程信息\n");
printf("\t\t\t0.退出");
printf("\n\t\t\t请输入功能选择编号(0-6):");
scanf("%c",&selmenu);
switch(selmenu)
{
case '1':
{
system("cls");
printf("学号:%s",p->num);
printf("\n输入新的数据:");
scanf("%s",p->num);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '2':
{
system("cls");
printf("班级:%s",p->classnum);
printf("\n输入新的数据:");
scanf("%s",p->classnum);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '3':
{
system("cls");
printf("姓名:%s",p->name);
printf("\n输入新的数据:");
scanf("%s",p->name);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '4':
{
system("cls");
printf("性别:%s",p->sex);
printf("\n输入新的数据:");
scanf("%s",p->sex);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '5':
{
system("cls");
printf("年龄:%d",p->age);
printf("\n输入新的数据:");
scanf("%d",&p->age);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '6':
{
do{
system("cls");
printf("\n\n\t\t\t1.添加选修课程信息");
printf("\t\t2.修改已有课程信息");
printf("\n\t\t\t0.退出");
printf("\n\t\t\t请输入功能选择编号(0-2):");
fflush(stdin);
scanf("%c",&ch6);
if(ch6=='0')
break;
if(ch6=='1')
{
p2=(struct stu1 *)malloc(LEM);
printf("\n\t\t\t课程编号:");
scanf("%s",p2->lessonnum);
printf("\n\t\t\t课程名称:");
scanf("%s",p2->lessonname);
printf("\n\t\t\t学分:");
scanf("%f",&p2->score);
printf("\n\t\t\t考试成绩:");
scanf("%f",&p2->testgrade);
printf("\n\t\t\t平时成绩:");
scanf("%f",&p2->commongrade);
p2->grade=p2->testgrade*+p2->commongrade*;
printf("\n\t\t\t综合成绩:%-6.1f",p2->grade);
p2->next=p1;
a[p->i]=p2;
p1=a[p->i];
printf("\n\t\t\t按任意键退出");
fflush(stdin);
scanf("%c",&ch7) ;
}
if(ch6=='2')
{
if(p1==0)
{
printf("无任何课程信息");
goto end;
}
printf("\n\n输入要修改课程的编号:");
fflush(stdin);
scanf("%s",lessonno);
while(strcmp(p1->lessonnum,lessonno)!=0)
{
if(p1->next==0)break;
p1=p1->next;
}
if(strcmp(p1->lessonnum,lessonno)==0)
{
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
printf("\n按任意键进行修改");
fflush(stdin);
scanf("%c",&ch3);
do{
system("cls");
printf("\n\n");
printf("\t\t\t1.修改课程编号");
printf("\t\t2.修改课程名称\n");
printf("\t\t\t3.修改学分");
printf("\t\t4.修改考试成绩\n");
printf("\t\t\t5.修改平时成绩");
printf("\t\t\t0.退出");
printf("\n\t\t\t请输入功能选择编号(0-5):");
scanf("%c",&selmenu1);
switch(selmenu1)
{
case '1':
{
printf("\n输入新的课程编号:");
scanf("%s",p1->lessonnum);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '2':
{
printf("\n输入新的课程名称:");
scanf("%s",p1->lessonname);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '3':
{
printf("\n输入新的学分:");
scanf("%f",&p1->score);
printf("\n修改成功!\n按任
意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '4':
{
printf("\n输入新的考试成绩:");
scanf("%f",&p1->testgrade);
printf("\n修改成功!\n按任
意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case '5':
{
printf("\n输入新的平时成绩:");
scanf("%f",&p1->commongrade);
printf("\n修改成功!\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
p1->grade=p1->testgrade*+p1->commongrade*;
}
}while(selmenu1!='0');
}
else printf("找不到%s\n",lessonno);
end:
;
}
printf("\n是否继续修改或添加另一选修课信息(y/n)");
fflush(stdin);
scanf("%c",&ch4);
}while(ch4=='Y'||ch4=='y');
}
}
}while(selmenu!='0');
}
}
/*----------------------------插入模块-----------------------------*/
void insert(void)
{
struct stu1 *create1(void) ;
char ch5;
system("cls");
struct stu *p1,*p2,*p;
p1=p2=head;
p=(struct stu *)malloc(LEN);
printf("输入要插入的学生的学号:");
scanf("%s",p->num);
if(head==0)
{
head=p;
p->next=0;
}
else if(strcmp(p->num,head->num)<0)
{
p->next=head;
head=p;
}
else
{
while(p1->next!=0&&strcmp(p->num,p1->num)>0)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p->num,p1->num)>0)
{
p1->next=p;
p->next=0;
}
else
{
p2->next=p;
p->next=p1;
}
}
printf("\n输入插入学生的具体信息");
printf("\n学号:%s",p->num);
printf("\n班级:");
scanf("%s",p->classnum);
printf("\n姓名:");
scanf("%s",p->name) ;
printf("\n性别:");
scanf("%s",p->sex);
printf("\n年龄:");
scanf("%d",&p->age);
printf("\n是否输入选修课信息(y/n)");
fflush(stdin); /*清空输入缓冲区*/
scanf("%c",&ch5);
p->i=n+1;
if(ch5=='y'||ch5=='Y')
a[n+1]=create1();
n++;
}
/*----------------------------删除模块------------------------------*/
void del(void)
{
system("cls");
char no[11];
struct stu *p1,*p2;
struct stu1 *p;
char ch;
p1=head;
p2=head;
printf("\n输入要删除学生信息的学号:");
scanf("%s",no);
if(head==0)
{printf("list null");goto end;}
while(strcmp(p1->num,no)!=0)
{
if(p1->next==0)
break;
p2=p1;
p1=p1->next;
}
if(strcmp(no,p1->num)==0)
{
p=a[p1->i];
printf("\n%17s","学号");
printf("%15s","班级");
printf("%16s","姓名");
printf("%15s","性别");
printf("%15s","年龄");
printf("\n%17s",p1->num);
printf("%15s",p1->classnum);
printf("%16s",p1->name) ;
printf("%15s",p1->sex);
printf("%15d",p1->age);
printf("\n********************************************************************************");
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(;p!=0;)
{
printf("\n%11s",p->lessonnum);
printf("%19s",p->lessonname);
printf("%9.1f",p->score);
printf("%13.1f",p->testgrade);
printf("%13.1f",p->commongrade);
printf("%13.1f",p->grade);
p=p->next;
}
printf("\n按任意键进行删除");
fflush(stdin);
scanf("%c",&ch);
if(head==p1)
head=p1->next;
else
p2->next=p1->next;
free(a[p1->i]);
free(p1);
--n;
system("cls");
printf("\n删除成功!");
printf("\n按任意键退出");
scanf("%c",&ch);
}
else printf("%s 找不到!\n",no);
end:
;
}
/*-----------------------------求平均模块-----------------------------*/
void average(void)
{
system("cls");
struct stu *p,*pa;
struct stu *b[max_num]={0};
struct stu1 *p1;
int k,j;
float sum;
char ch;
if(head==0)
{
printf("\n无学生信息,请先输入学生信息");
goto end;
}
for(p=head;p!=0;p=p->next) /*求每个学生的平均成绩*/
{
p1=a[p->i];
if(p1==0)
p->ave=0;
else
{
for(j=0,sum=0;p1!=0;j++)
{
sum=sum+p1->grade;
p1=p1->next;
}
p->ave=sum/j;
}
}
for(p=head,k=0;p!=0;k++) /*把链表中各指针放入数组中*/
{
b[k]=p;
p=p->next;
}
for(k=0;b[k]!=0;k++) /*按照平均分的高低来存放各指针*/
{
for(j=k+1;b[j]!=0;j++)
{
if(b[k]->ave<b[j]->ave)
{
pa=b[k];
b[k]=b[j];
b[j]=pa;
}
}
}
for(k=0;b[k]!=0;k++) /*按顺序输出学生信息*/
{
p1=a[b[k]->i];
printf("\n%12s","学号");
printf("%15s","班级");
printf("%12s","姓名");
printf("%10s","性别");
printf("%10s","年龄");
printf("%12s","平均成绩");
printf("\n%12s",b[k]->num);
printf("%15s",b[k]->classnum);
printf("%12s",b[k]->name) ;
printf("%10s",b[k]->sex);
printf("%10d",b[k]->age);
printf("%12f",b[k]->ave);
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(;p1!=0;)
{
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
p1=p1->next;
}
printf("\n********************************************************************************");
}
end:
printf("\n按任意键退出");
fflush(stdin);
scanf("%c",&ch);
}
/*-----------------------------求不及格清单模块-------------------------------*/
void falist(void)
{
system("cls");
int j,k;
struct stu *p;
struct stu1 *p1;
char ch;
for(p=head,k=0;p!=0;p=p->next)
{
for(p1=a[p->i],j=0;p1!=0;p1=p1->next)
{
if(p1->grade<60)
j++;
k++;
}
if(j!=0)
{
printf("姓名:%s",p->name);
printf("\n学号:%s",p->num);
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(p1=a[p->i];p1!=0;p1=p1->next)
{
if(p1->grade<60)
{
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
}
}
printf("\n********************************************************************************");
}
}
if(k==0)
printf("不及格的清单为空.");
printf("\n按任意键退出");
fflush(stdin);
scanf("%c",&ch);
}
/*-------------------------保存模块--------------------------
*/
void save(void)/*将数据存入文件中*/
{
FILE *fp;/*定义一个指向文件的指针*/
struct stu *p;/*定义一个指向学生基本信息链表的指针*/
struct stu1 *p1;/*定义一个指向课程链表的指针*/
char ch;
char filename[20];
if(n==0)
{
printf("你还没有建立数据库!请先建立数据库!\n");
goto end;
}
printf("输入文件名:");
fflush(stdin);
gets(filename);
fp=fopen(filename,"w");
if(fp==0)/*以写的方式打开文件,如果没有打开,则提示*/
{
printf("不能打开文件!\n");
exit(0);
}
for(p=head;p!=0;p=p->next)/*遍历链表,让每一个数都存入文件中*/
{
p1=a[p->i];
fprintf(fp,"\n%15s",p->num);
fprintf(fp,"%15s",p->classnum);
fprintf(fp,"%15s",p->name) ;
fprintf(fp,"%15s",p->sex);
fprintf(fp,"%15d",p->age);
for(;p1!=0;)
{
fprintf(fp,"%11s",p1->lessonnum);
fprintf(fp,"%19s",p1->lessonname);
fprintf(fp,"%9.1f",p1->score);
fprintf(fp,"%13.1f",p1->testgrade);
fprintf(fp,"%13.1f",p1->commongrade);
fprintf(fp,"%13.1f",p1->grade);
p1=p1->next;
}
}
printf("保存成功!\n");/*提示保存文件成功*/
fclose(fp);/*关闭文件*/
end:
printf("按任意键退出");
fflush(stdin);
scanf("%c",&ch);
}
/*--------------------------主程序---------------------------*/
main()
{
char selmenu; /*定义局部变量,用于记录用户选择的功能编号*/
do
{
system("cls"); /*清屏函数*/
printf("\n\n");
printf("\t\t\t\t学生成绩管理系统\n\n");
printf("\t\t\t1.输入学生信息");
printf("\t\t2.修改学生信息\n");
printf("\t\t\t3.插入学生信息");
printf("\t\t4.查询学生信息\n");
printf("\t\t\t5.删除学生信息");
printf("\t\t6.计算平均成绩\n");
printf("\t\t\t7.不及格学生清单");
printf("\t8.保存到文件\n");
printf("\t\t\t9.打开文件");
printf("\t\t0.退出");
printf("\n\t\t\t请输入功能选择编号(0-9):");
scanf("%c",&selmenu); /*接受用户选择的功能编号*/
switch(selmenu) /*输入不同功能编号调用相应函数来完成功能*/
{
case '1':
create();
break;
case '2':
modify();
break;
case '3':
insert();
break;
case '4':
search();
break;
case '5':
del();
break;
case '6':
average();
break;
case '7':
falist();
break;
case '8':
save();
break;
case '9':
openfile();
break;
}
} while(selmenu!='0');
}
【学生成绩管理系统c语言课程设计报告 学生成绩管理系统c语言课程设计报告一只学废狗】相关文章:
个人自查报告范文 医院个人自查报告范文08-21
个人自查报告范文 纪检监察教育整顿个人自查报告范文08-21
2023年个人自查报告范文 2023年个人自查自纠报告08-21
个人自查报告范文 医务个人自查报告范文08-21
学生成绩管理系统c语言课程设计报告 学生成绩管理系统c语言课程设计报告一只学废狗08-21
C语言程序设计课程设计报告 c语言程序课程设计的总结08-21
C语言课程设计报告——贪吃蛇源程序 c语言课程设计贪吃蛇报告书08-21
C语言课程设计报告 C语言课程设计报告书08-21