C语言程序课程设计报告lida.docx

上传人:b****5 文档编号:7881082 上传时间:2023-01-26 格式:DOCX 页数:20 大小:139.07KB
下载 相关 举报
C语言程序课程设计报告lida.docx_第1页
第1页 / 共20页
C语言程序课程设计报告lida.docx_第2页
第2页 / 共20页
C语言程序课程设计报告lida.docx_第3页
第3页 / 共20页
C语言程序课程设计报告lida.docx_第4页
第4页 / 共20页
C语言程序课程设计报告lida.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言程序课程设计报告lida.docx

《C语言程序课程设计报告lida.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计报告lida.docx(20页珍藏版)》请在冰豆网上搜索。

C语言程序课程设计报告lida.docx

C语言程序课程设计报告lida

邵阳学院信息工程系

 

(高级语言程序设计)

 

专业班级:

通信工程二班

学生姓名:

李达

学号:

1141303072

指导教师:

黄同成

课程设计时间:

20125.18-6.3

 

目录

1前言2

2需求分析2

2.1要求2

2.2任务2

2.3运行环境2

2.4开发工具2

3概要设计与详细设计2

3.1系统流程图3

3.2查询函数流程图3

4编码与实现5

4.1分析5

4.2具体代码实现6

4.3运行结果截图22

1)主菜单22

4)按成绩排序23

5课程设计总结23

参考文献24

致谢24

1前言

编写一个程序来处理学生成绩。

通过一个结构体数组来存放输入的每一位同学的成绩(包括学期、学号、班级、姓名、四门课成绩),然后将其信息存入文件中。

并且能够完成队学生成绩的录入、修改、查询,按班级输出学生成绩单及不及格学生名单,统计学生成绩求学生的总分及平均分。

2需求分析

2.1要求

(1)用C语言实现程序设计;

(2)利用结构体进行相关信息处理;

(3)画出查询模块的流程图;

(4)系统的各个功能模块要求用函数的形式实现;

(5)界面友好(良好的人机互交),程序要有注释。

2.2任务

(1)定义一个结构体类型数组,输入每一位同学的记录(包括学期、学号、班级、姓名、四门课成绩),将其信息存入文件中;

(2)按顺序输入每个学生的信息;

(3)画出所有模块的流程图;

(4)编写代码;

(5)程序分析与调试。

2.3运行环境

(1)WINDOWS2000/XP系统

(2)TurboC2.0编译环境

2.4开发工具

C语言

3概要设计与详细设计

3.1系统流程图

图3.1系统流程图

3.2查询函数流程图

首先输入学号,当没有记录是显示“没有任何学生”,返回函数重新开始。

如过输入学号合格,则对已经存在的记录进行查找,最后打印信息。

函数流程图如下所示:

图3-2search()函数流程图

 

4编码与实现

4.1分析

1)本程序需要定义多个结构体,用于存放学生的相关信息。

structstudent//定义结构体

2)主函数功能比较简单,用while循环语句和switch多重选择语句来显示主界面和调用函数。

在主函数的前面要写必须的头文件,预定义语句以及全局变量的结构体。

3)利用while循环结构和else/if语句来实现增加信息的功能。

先定义5个指针*p0,*p1,*p2,*p3,*max,开始运行,当学生学号小于0时返回add函数,重新开始,而当输入0时返回菜单函数。

当输入学号符合要求时,函数向下运行,令p3=head,用else/if语句判断输入的学号是否重复,如果是则重新输入,如果不是,函数继续向下运行。

接下来利用指针来储存依次输入的语文、英语、数学、计算机成绩。

而用while结构来保证输入的成绩在0~100之间,如果不是则重新输入。

4)在C语言中无法做到删除和移动数据,所以删除记录要先将所有记录从文件中读出,删除后再将记录写回文件中。

每读出一条记录,按其在文件中的顺序做好指针链接关系,然后查处要删除的学生信息,将其在链表中删除,最后再将变动的记录重新写回文件中。

用指针,while循环和else/if结构来实现查找出要删除的学生。

5)在插入函数中利用指针,和else/if语句来实现输入的数据按照插入相应的位置。

6)利用指针、链表打开已经储存的信息。

7)先用if判断是否存在信息,如果没有则返回,如果已经存在则继续运行函数。

利用while循环语句和switch多重选择语句来实现是按照哪一种方式排名,用for,if语句来实现排名。

8)用do/while循环语句和switch多重选择语句调用各个功能函数。

9)用while循环语句和switch多重选择语句输出记录中的个人总分和平均分、单科平均分、总分最高分、总分最低分。

4.2具体代码实现

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

typedefstruct{

intnum;//学号

charname[20];//姓名

charsex[10];

intage;

doublemaths;//数学成绩

doubleenglish;//英语成绩

doublechinese;//语文成绩

doublecomputer;//计算机成绩

doubletotal;//总成绩

doubleaverage;//平均成绩

}STUDENT;//定义结构体

#defineN100

intmenu(){

chara;

do{system("cls");//运行前清零

printf("\t\t学生成绩管理系统\n");

printf("\t\t|1.输入记录\n");

printf("\t\t|2.插入\n");

printf("\t\t|3.按学号排序\n");

printf("\t\t|4.按成绩排序\n");

printf("\t\t|5.查询信息\n");

printf("\t\t|6.删除某人信息\n");

printf("\t\t|7.浏览结果\n");

printf("\t\t|0.退出\n");

printf("\t\t**********************************\n");

printf("\t\t\t给出你的选择(0-7):

");

a=getchar();

}while(a<'0'||a>'7');

return(a-'0');

}

voidinput(STUDENT*s,intsize){//输入函数

inti;

FILE*fp;

if((fp=fopen("stu.dat","wb"))==NULL){

printf("Cannotopenfile!

");

exit(0);

}

for(i=0;i

printf("输入学号:

\n");

scanf("%d",&s[i].num);

printf("输入姓名:

\n");

scanf("%s",s[i].name);

printf("输入性别:

\n");

scanf("%s",s[i].sex);

printf("输入年龄:

\n");

scanf("%d",&s[i].age);

printf("输入数学成绩:

\n");

scanf("%lf",&s[i].maths);

printf("输入英语成绩:

\n");

scanf("%lf",&s[i].english);

printf("输入语文成绩:

\n");

scanf("%lf",&s[i].chinese);

printf("输入计算机成绩:

\n");

scanf("%lf",&s[i].computer);

s[i].total=s[i].maths+s[i].chinese+s[i].english+s[i].computer;

s[i].average=s[i].total/4.0;

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voidoutput(STUDENT*s){

//输出函数

inti;

FILE*fp;

if((fp=fopen("stu.dat","rb"))==NULL){

printf("Cannotopenfile!

");

exit(0);

}

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

}

}

voidsave(){/*保存到磁盘上*/

FILE*fp;

STUDENT*s;

fp=fopen("stu.dat","wb");

inti;

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voidread(STUDENT*s,intsize){/*从磁盘内读取*/

FILE*fp;

fp=fopen("stu.dat","rb");

inti;

for(i=0;i

fread(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

 

voidfind(STUDENT*s,intsize){//按姓名查找

inti,flag=0;

charc[20];

FILE*fp;

fp=fopen("stu.dat","rb");

printf("输入要查询学生的姓名为:

\n");

scanf("%s",c);

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++)

if(strcmp(s[i].name,c)==0){

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);flag=1;

}

if(flag==0)printf("输入有误!

");

fclose(fp);

}

voidsort_by_num(STUDENT*s,intsize){//按学号排序

inti,j,n=0;

STUDENTt;

FILE*fp;

fp=fopen("stu.dat","rb");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

n++;}

for(i=0;i

for(j=i+1;j

if(s[i].num>s[j].num){

t=s[i];

s[i]=s[j];

s[j]=t;

}

}

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;i

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);}

fp=fopen("stu.dat","wb");

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voidsort_by_total(STUDENT*s,intsize){//按总分排序函数

inti,j,n=0;

STUDENTt;

FILE*fp;

fp=fopen("stu.dat","rb");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

n++;

}

for(i=0;i

for(j=i+1;j

if(s[i].total

t=s[i];

s[i]=s[j];

s[j]=t;

}

}

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;i

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);}

fp=fopen("stu.dat","wb");

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);

}

fclose(fp);

}

voiddel(STUDENT*s,intsize){//按学号删除函数

inti,n;

intnum;

intflag=0;

inttotal=0,m=0;

FILE*fp;

fp=fopen("stu.dat","rb");

printf("请输入要删除的学生学号:

\n");

scanf("%d",&num);

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

total++;

}

for(i=0;i

if(num==s[i].num){flag=1;

printf("\t\t要删除学生的信息");

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

for(i=i;i

s[i]=s[i+1];}

if((fp=fopen("stu.dat","wb"))==NULL){

printf("Cannotopenfile!

");

exit(0);

}

for(i=0;i

fwrite(&s[i],sizeof(STUDENT),1,fp);}}

fclose(fp);

printf("\t\t删除后的情况\n");

printf("学号姓名数学英语语文计算机总分平均\n");

fp=fopen("stu.dat","rb");

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

m++;}

for(i=0;i

printf("%-12d",s[i].num);

printf("%-11s",s[i].name);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

}

if(flag==0){

printf("*******************************************");

printf("输入错误!

\n");

printf("请返回!

\n");

printf("*******************************************");}

printf("\n\n\n");

fclose(fp);

}

 

voidinsert(STUDENT*s,intsize)//按学号插入

{

inti,n=0;

inttotal=0;

FILE*fp;

fp=fopen("stu.dat","ab");

rewind(fp);

for(i=0;fread(&s[i],sizeof(STUDENT),1,fp)==1;i++){

printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

printf("%-7d%-6s%-6s%-4s%7.1f%7.1f%7.1f%7.1f%7.1f%7.1f\n",s[i].num,s[i].sex,s[i].age,s[i].maths,s[i].english,s[i].chinese,s[i].computer,s[i].total,s[i].average);

}

total=i;

printf("请输入要插入学生的学号:

\n");

scanf("%d",&s[size].num);

printf("输入姓名:

\n");

scanf("%s",s[size].name);

printf("输入性别:

\n");

scanf("%s",s[size].sex);

printf("输入年龄:

\n");

scanf("%d",&s[size].age);

printf("输入数学成绩:

\n");

scanf("%lf",&s[size].maths);

printf("输入英语成绩:

\n");

scanf("%lf",&s[size].english);

printf("输入语文成绩:

\n");

scanf("%lf",&s[size].chinese);

printf("输入计算机成绩:

\n");

scanf("%lf",&s[size].computer);

s[size].total=s[size].maths+s[size].chinese+s[size].english+s[size].computer;

s[size].average=s[size].total/4.0;

fwrite(&s[size],sizeof(STUDENT),1,fp);

fclose(fp);

//while(!

feof(fp))

//if(fread(&s[n],sizeof(STUDENT),1,fp))

//n++;

/*printf("学号姓名性别年龄数学英语语文计算机总分平均\n");

for(i=0;i

printf("%-7d",s[i].num);

printf("%-6s",s[i].name);

printf("%-6s",s[i].sex);

printf("%-4d",s[i].age);

printf("%7.1f",s[i].maths);

printf("%7.1f",s[i].english);

printf("%7.1f",s[i].chinese);

printf("%7.1f",s[i].computer);

printf("%7.1f",s[i].total);

printf("%7.1f\n",s[i].average);

}*/

}

voidmain(){//主函数

STUDENTstd[N];//定义结构体数组

intm;

while

(1){//循环保证多次应用

switch(menu()){//运用菜单函数

case1:

printf("请输入你要登记的人数:

\n");

scanf("%d",&m);

input(std,m);system("pause");break;

case2:

insert(std,N);system("pause");break;

case3:

sort_by_num(std,N);

//output(std);

system("pause");break;

case

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1