资源描述
成绩管理系统
目录
一、系统意义及功效: 2
二、系统功效结构图及调用关系: 2
三、分析介绍各个功效 3
四、程序运行界面 6
五、系统使用说明: 8
六、c语言源程序 8
七、心得体会: 17
八、实习日志: 17
九、参考文件: 17
一、系统意义及功效:
意义:
依据自顶向下、逐步求精、模块化标准完成一个学生成绩管理系统程序设计,使之含有系统所需要功效。
关键功效:
(1) 含有求平均分、最高分、最低分功效。
(2) 含有学生信息排序功效。
(3) 含有学生成绩基础信息浏览功效。
(4) 含有学生成绩基础信息添加功效。
(5) 含有学生成绩基础信息功效。
(6) 含有学生成绩基础信息查询功效。
二、系统功效结构图及调用关系:
主函数
处理成绩
信息排序
信息浏览
信息添加
信息删除
信息查询
退出系统
三、分析介绍各个功效
进入
输入数字
Case=?
添加程序
删除程序
查找程序
排序程序
浏览程序
处理程序
退
出
Case=1
Case=2
Case=3
Case=4
Case=5
Case=6
Case=7
1、 学生信息添加功效:
进入
输入
输入学号、姓名、四门成绩
输出全部
退出
2、 学生信息删除功效:
输入
进入
输入
输入要删除学生学号
输出全部
退出
3、 学生信息查找功效:
进入
输入
输入查找学生学号
输出全部
退出
4、 学生信息排序功效:
进入
输入
输入全部学生学号
输出全部
退出
5、 学生信息浏览功效:
进入
输入
打开文件
输出全部
退出
6、 学生信息处理功效:
进入
输入
输入全部学生学号
输出全部
退出
四、程序运行界面
学生信息添加界面
运行界面
学生信息查找界面
查找界面
五、系统使用说明:
系统含有学生信息添加功效、学生信息删除功效、学生信息查找功效、学生信息排序功效、学生信息浏览功效、学生成绩求平均分、最大值、最小值功效。
六、c语言源程序
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student {
int xuehao;
char name[20];
int scores[4];
struct student * next;
}STU;
void tianjia();
void handle();
void shanchu();
void chaozhao();
void paixu();
void liulan();
void main()
{
char ch;
FILE * fp;
if((fp=fopen("student.dat","r"))==NULL)
{
fp=fopen("student.dat","w");
fclose(fp);
}
do
{
system("cls");
printf("**************成绩统计系统***************************\n");
printf(" 1: 添加学生信息 \n");
printf(" 2: 删除学生信息 \n");
printf(" 3: 查找学生信息 \n");
printf(" 4: 学生信息排序 \n");
printf(" 5: 浏览学生信息 \n");
printf(" 6: 求平均值、最大值、最小值 \n");
printf(" 7: 退出 \n");
printf("请选择输入选项[1\\2\\3\\4\\5\\6\\7]:>");
do
{
ch=getchar();
}while(ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7');
getchar();
switch(ch)
{
case '1': tianjia(); break;
case '2': shanchu(); break;
case '3': chaozhao(); break;
case '4': paixu(); break;
case '5': liulan(); break;
case '6': handle(); break;
case '7': exit(0);
}
printf(" press any key to continue:\n");
getchar();
system("cls");
}while(1);
}
void handle()
{
FILE *fp;
STU * head, *p1, *p2;
int i;
int max[4], min[4];
float aver[4];
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can not open this file");
exit(1);
}
head=p1=p2=(STU *)malloc(sizeof(STU));
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
p2=(STU *)malloc(sizeof(STU));
}
p1->next=NULL;
free(p2);
fclose(fp);
for(i=0;i<4;i++)
{
aver[i]+=head->scores[i];
max[i]=min[i]=head->scores[i];
}
p2=head->next;
while(p2!=NULL)
{
for(i=0;i<4;i++)
{
aver[i]+=p2->scores[i];
if(max[i]<p2->scores[i])
max[i]=p2->scores[i];
if(min[i]>p2->scores[i])
min[i]=p2->scores[i];
}
}
for(i=0;i<4;i++)
{
printf("the average of #%d is: %f",i+1,aver[i]);
printf("the maxmium of #%d is: %d",i+1,max[i]);
printf("the minmium of #%d is: %d",i+1,min[i]);
}
}
void tianjia()
{
FILE *fp;
STU * head, *p1, *p2;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can not open this file");
exit(1);
}
head=p1=p2=(STU*)malloc(sizeof(STU));
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
p2=(STU *)malloc(sizeof(STU));
}
p1->next=NULL;
free(p2);
fclose(fp);
p2=p1;
printf("输入待添加学生(-1 结束):\n");
while(1)
{
p2=(STU *)malloc(sizeof(STU));
printf("输入学号:");
scanf("%d",&p2->xuehao);
if(p2->xuehao==-1) break;
printf("输入姓名:");
scanf("%s",p2->name);
printf("输入四门成绩:");
scanf("%d%d%d%d",&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
}
p1->next=NULL;
free(p2);
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can not open this file");
exit(1);
}
p2=head;
while(p2!=NULL)
{
fprintf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p2=p2->next;
}
fclose(fp);
free(head);
}
void shanchu()
{
FILE *fp;
STU * head, *p1, *p2;
STU t;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can not open this file");
exit(1);
}
head=p1=p2=(STU *)malloc(sizeof(STU));
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
p2=(STU *)malloc(sizeof(STU));
}
p1->next=NULL;
free(p2);
fclose(fp);
p1=p2=head;
printf("输入要查找学生学号(-1 结束):\n");
scanf("%d",&t.xuehao);
{
getchar();
while(p2!=NULL)
{
if(head->xuehao==t.xuehao)
{
head=head->next;
p1->next=NULL;
free(p1);
p1=p2=head;
}
else
{
if(p2->xuehao==t.next)
{
p1->next=p2->next;
p2->next=NULL;
free(p2);
p2=p1;
}
p1=p2;
p2=p2->next;
}
}
}
p1->next=NULL;
free(p2);
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can not open this file");
exit(1);
}
while(head!=NULL)
{
fprintf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
head=head->next;
}
fclose(fp);
free(head);
}
void chaozhao()
{
FILE *fp;
STU * head, *p1, *p2;
STU t;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can not open this file");
exit(1);
}
head=p1=p2=(STU *)malloc(sizeof(STU));
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
p2=(STU *)malloc(sizeof(STU));
}
p1->next=NULL;
free(p2);
fclose(fp);
p1=p2=head;
printf("输入要查找学生学号(-1 结束):\n");
scanf("%d",&t.xuehao);
{
getchar();
while(p2!=NULL)
{
if(p2->xuehao==t.xuehao)
printf("%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p2=p2->next;
}
}
}
void paixu()
{
FILE *fp;
STU * head, *p1, *p2;
STU t;
int i;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can not open this file");
exit(1);
}
head=p1=p2=(STU *)malloc(sizeof(STU));
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
p2=(STU*)malloc(sizeof(STU));
}
p1->next=NULL;
free(p2);
fclose(fp);
printf("根据学号升序排序:\n");
for(p1=head;p1!=NULL;p1=p1->next)
for(p2=p1->next;p2!=NULL;p2=p2->next)
if(p1->xuehao>p2->xuehao)
{
t.xuehao=p1->xuehao;
strcpy(t.name,p1->name);
for(i=0;i<4;i++)
t.scores[i]=p1->scores[i];
p1->xuehao=p2->xuehao;
for(i=0;i<4;i++)
p1->scores[i]=p2->scores[i];
p2->xuehao=t.xuehao;
for(i=0;i<4;i++)
p2->scores[i]=t.scores[i];
}
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can not open this file");
exit(1);
}
while(head!=NULL)
{
fprintf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
head=head->next;
}
fclose(fp);
free(head);
}
void liulan()
{
FILE *fp;
STU * head, *p1, *p2;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can not open this file");
exit(1);
}
head=p1=p2=(STU*)malloc(sizeof(STU));
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p1->next=p2;
p1=p2;
p2=(STU *)malloc(sizeof(STU));
}
p1->next=NULL;
free(p2);
fclose(fp);
p2=head;
while(p2!=NULL)
{
printf("%d %s %d %d %d %d\n",&p2->xuehao,p2->name,&p2->scores[0],&p2->scores[1],&p2->scores[2],&p2->scores[3]);
p2=p2->next;
}
}
七、心得体会:
在这为期一周课程设计中,我发觉了很多问题,也正是因为发觉了这些问题也让我学会了很多东西。在写程序过程中总会出现很多错误,这让我认识到我还有很多东西不会,也有很多不足,所以在写程序之前我又把书本最终几章看了一遍,在写程序过程中我也把书放在旁边随时翻阅,这不仅让我巩固了已经学习过知识,也让我弄懂了很多问题。在这一周里,很多时候程序没有错误,但却没措施运行,我学会了经过调试程序发觉问题所在,然后处理问题。在这一周里,我学到了很多东西,这对我以后学习生活全部有很关键作用。
八、实习日志:
1)6月10号 今天下午开始课程设计,对题目要求有了初步了解。
2)6月11号----6月12号 经过小组研究、讨论完成了整体框架程序编写。
3)6月13号----6月18号 对各个模块开始进行编写、运行、修改、完善等。
九、参考文件:
C语言程序设计(第二版)
展开阅读全文