学生成绩记录簿设计

课程设计(大作业)报告

课程名称: 程序设计基础 设计题目: 学生成绩记录簿设计 院 系: 信息技术学院 班 级:设 计 者:学 号: xx 指导教师: xx 设计时间:

昆明学院课程设计(大作业)任务书

目录

一.问题的定义 .......................................... 5 二、需求分析 ............................................. 5 三、总体设计 ............................................. 5 四、详细设计 ............................................. 6 五、调试与测试 ........................................ 30 六、结语 ................................................. 31

一.问题的定义

编制一个C 语言成绩记录簿,每个学生信息包括:学号、姓名、C 语言成绩。

要求:

1. 数据存储采用文件形式。 2. 标准的C 语言输入输出 3. 功能完善,适当注释

4. 模块化设计、结构化编程

二、需求分析

系统能实现以下主要功能:

1.系统以菜单方式工作

2. 创建学生成绩信息并以磁盘文件保存;

3. 读取磁盘文件并显示输出所有学生的成绩; 4. 查询学生成绩

(1)按学号查询成绩 (2)学号姓名查询成绩 4.添加成绩记录;

5.修改指定姓名或学号的学生的成绩并可存盘;

6.显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。

三、总体设计

根据系统的要求,系统总体设计如图1所示。

图1 系统总体结构四、详细设计

该部分主要包括:数据结构设计、函数设计(包括函数原型、算法思想、流程描述)、代码设计及程序运行结果显示。

(一) 学生成绩数据结构设计

#include #include #include int i,j,k,y; FILE *fp; Struct stu {

int no;

char name[30]; float cscore; long a;

};struct stu s[100];

(二) 函数设计

1. 主函数

main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。 2. 其他各功能函数

(1) 学生成绩信息录入函数void input() 算法思想:

①依次录入结构体数组中所包含的各个成员;

②直到输入的结构体成员中信息全部为0,数据输入结束;

③返回实际录入的学生成绩信息数。

(2) 将学生成绩信息输出为void output() 算法思想:

①定义结构体变量的指针变量;

②输出所输入的全部信息,若不能输出信息给出提示信息; ③将文件中的信息依次读出,最后结构体的指针为NULL 。

(3)从文件中修改学生成绩信息void modify() 算法思想:

①定义指向结构体变量的指针和指向文件的指针;

②修改方式分为两种(学号和姓名),选择是给出相应的信息; ③将修改后的信息保存,并提示。

3. 流程描述 (1)菜单函数

int fun() { }

int n;

system("cls");

printf("\n\n\t\t\t\t 成绩记录薄");

printf("\n\n\t\t\t"); for(i=0;i

printf("\t\t\t ************菜单*************\n"); printf("\t\t\t* 1、创建学生的信息! \t*\n"); printf("\t\t\t* 2、输出所有学生的信息! \t*\n"); printf("\t\t\t* 3、修改成绩! \t*\n"); printf("\t\t\t* 4、查询! \t*\n"); printf("\t\t\t* 5、显示成绩分段的学生信息!\t*\n"); printf("\t\t\t* 6、学生成绩排名! \t*\n"); printf("\t\t\t* 7、退出成绩记录薄! \t*\n"); printf("\t\t\t");

for(i=0;i

printf("\n\n");

printf("\n\t\t\t 请输入选项:"); scanf("%d",&n); return n;

(2) 学生成绩信息录入函数

void input()

{

system("cls"); i=0; fp=fopen("out.dat","w"); printf("请以0作为输入学生学号信息的结束!\n");

do

{ printf("输入学生的学号:"); scanf("%d",&s[i].no); printf("输入学生的姓名:");

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

printf("输入学生的C 语言成绩:"); scanf("%f",&s[i].cscore);

printf("输入添加成绩的时间:"); scanf("%ld",&s[i].a); if(s[i].no!=0)

fprintf(fp,"%d %-4s %.1f %ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a); }while(s[i].no!=0); fclose(fp);

}

void output() //学生全部信息输出 { if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n"); }

printf("\t\t\t全部的学生信息:\n");

k=0;

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF) {

printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a); k++; } fclose(fp); }

(3)学生信息输出函数

void output() {

if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

}

printf("\t\t\t全部的学生信息:\n");

k=0;

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF) { printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a); k++; } fclose(fp); }

(4)修改学生信息函数 void modify() {

char st[30]; int x,num; float nu; long h; k=0; system("cls");

if((fp=fopen("out.dat","r"))==NULL)

{

printf("Cannot open the file!\n"); return; }

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF) { k++; } fclose(fp);

printf("输入1表示用学号修改,输入2表示用姓名修改!请选择:\n"); scanf("%d",&x); if(x==1) {

printf("请输入修改成绩人的学号:");scanf("%d",&num); for(i=0;i

if(num==s[i].no) { printf("请输入修改的成绩:\n"); scanf("%f",&nu);

s[i].cscore=nu; printf("请输入修改的时间:\n");

scanf("%ld",&h);

s[i].a=h;

fp=fopen("out.dat","w"); for(i=0;i

return;

}

printf("没有找到该生的信息!\n");

return;

if(x==2) {

printf("请输入修改成绩人的姓名:");

scanf("%s",st); for(i=0;i

if(strcmp(s[i].name,st)==0) { printf("请输入修改的成绩:\n"); scanf("%f",&nu);

s[i].cscore=nu; printf("请输入修改成绩的时间:\n");

scanf("%ld",&h); s[i].a=h;

fp=fopen("out.dat","w");

for(i=0;i

fprintf(fp,"%d %s %.1f %ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);

fclose(fp); printf("修改成功\n");

return; }

printf("没有找到该生的信息!\n"); return; }

(5) 代码设计和执行结果

1. 头文件

Struct stu {

int no;/*学号*/

char name[30]; /*姓名*/

float cscore; /*成绩*/

long a; /*时间*/

};struct stu s[100];

/******以下是函数原型*******/

void input() /*输入记录*/

void output()/*输出记录*/

void modify()/*修改记录*/

2. 源程序代码与运行结果

#include

#include

#include

int i,j,k,y;

FILE *fp;

struct stu

定义

{

int no;

char name[30];

float cscore;

long a;

};struct stu s[100];

//结构体函数的

int fun() //目录函数

{

int n; system("cls"); printf("\n\n\t\t\t\t 成绩记录薄"); printf("\n\n\t\t\t"); for(i=0;i

for(i=0;i

printf("*");

} printf("\n\t\t\t 请输入选项:"); scanf("%d",&n); return n;

void input() //输入学生的学号、姓名、成绩信息 {

i=0;

system("cls"); fp=fopen("out.dat","w"); printf("请以0作为输入学生学号信息的结束!\n"); do { printf("输入学生的学号:"); scanf("%d",&s[i].no);

printf("输入学生的姓名:");

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

printf("输入学生的C 语言成绩:");

scanf("%f",&s[i].cscore);

printf("输入添加成绩的时间:");

scanf("%ld",&s[i].a);

if(s[i].no!=0)

fprintf(fp,"%d%-4s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);

}

void output() / /学生全部信息输出

{

if((fp=fopen("out.dat","r"))==NULL) { }while(s[i].no!=0); fclose(fp);

printf("Cannot open the file!\n");

}

printf("\t\t\t全部的学生信息:\n");

k=0;

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

{

printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a);

k++;

}

fclose(fp);

}

void modify() //修改学生信息

{

char st[30]; int x,num; float nu; long h; k=0; system("cls"); if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

return;

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

k++;

} {

fclose(fp);

printf("输入1表示用学号修改,输入2表示用姓名修改!

请选择:\n");

scanf("%d",&x); if(x==1) { printf("请输入修改成绩人的学号:");scanf("%d",&num);

for(i=0;i

fclose(fp); printf("修改成功\n"); return;

printf("没有找到该生的信息!\n"); return; } if(x==2) { printf("请输入修改成绩人的姓名:"); scanf("%s",st); for(i=0;i

printf("修改成功\n"); return; } printf("没有找到该生的信息!\n"); return; }

}

void lookat() //学生信息查询

{

char st[30]; int x,num; k=0; system("cls"); if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

return;

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

{

k++;

} printf("输入1表示用学号查询,输入2表示用姓名查询!请选择:\n");

].a);

scanf("%d",&x); if(x==1) { printf("请输入查询的学号:"); scanf("%d",&num); for(i=0;i

}

if(x==2)

{printf("请输入查询的姓名:");

scanf("%s",st);

for(i=0;i

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

{

printf("%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i

].a);

} return; } printf("对不起,找不到该生!\n"); }

void subsection() //学生成绩分段 {

system("cls"); k=0; if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

k++;

} printf("\t\t\t 90分以上学生的信息!\n"); for(i=0;i=90) printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].csco{ re,s[i].a);

printf("\n\n");

printf("\t\t\t 80到89分学生的信息!\n");

for(i=0;i

if(s[i].cscore=80) printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);

printf("\n\n");

printf("\t\t\t 60到79分学生的信息!\n");

for(i=0;i

if(s[i].cscore>=60&&s[i].cscore

printf("\n\n");

printf("\t\t\t 60分以下学生的信息!\n");

for(i=0;i

if(s[i].cscore

}

void rank() //成绩的排序

{

printf("\n\n"); struct stu t; k=0; system("cls"); if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

k++;

{ } for(i=0;i

for(j=i+1;j

if(s[i].cscore

名%d %-4s %.1f %ld\n",i+1,s[i].no,s[i].name,s[i].cscore,s[i].a); }

void choose(int n) //目录的选项

{

system("cls"); switch(n) {

case 1:input(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 2:output(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 3:modify(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 4:lookat(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 5:subsection(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 6:rank(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 7:exit(0);break; default:printf("\n\n\t\t\t 输入没有的选项,请重新输入!\n");

choose(fun());

}

void main() //主函数 {

}

}

int n; system("cls"); n=fun(); choose(n);

执行结果如图所示:

(1) 菜单

(2)创建学生信息

(3)退出创建学生信息

(4)输出全部的学生信息

(5)用学号修改学生信息

(6)用姓名修改学生信息

(7)没有找到该学生的信息

(8)以开始输入的学生信息作对比

五、调试与测试

起初,我们在运行程序的时候,程序基本上都能运行,并且也都可以达到一些基本的要求,但是在我们做完一项需求的时候,该程序并不能返回到菜单就直接结束了,当再次打开该程序的时候,以前输入的信息都保存了。开始时,我们

以为只是每个程序后面的exit(0);影响了程序不能循环执行,但是当我们把它全部都改为return; 的时候,该程序依然不能循环使用。而在我们与其他程序对比的时候发现,有些程序使用了choose(fun());并且这些程序能够循环使用,于是我们就在我们设计的程序中仿照其他的程序使用了choose(fun());,最终我们的整个程序能够按照题目要求完美运行了。

六、结语

通过这次的课程设计,增加了我对学习C 语言学习的兴趣,虽然还不是真正的明白所有的C 语言的子函数和里面的一些逻辑顺序,但我从C 语言这门课程开始,已经发现程序设计的乐趣,在学习C 语言的过程中也学到了许多计算机应用基础知识,对计算机的运行也有一个大体的了解。这次课程设计经过老师的讲解,自己的查找,在网上的搜索,实现题目上的要求,先做出一些简单的函数和程序,一步步的在做出其它的内容,不过在实际操作过程中犯得一些错误也还是会得到一些意外的收获。在具体的操作中,对这学期的C 语言的理论知识得到巩固,在设计的过程中也发现自己的不足之处,在以后的学习和上机的操作中会更加注意,同时体会到C 语言的简洁和灵活。在上机操作中我们的任何不懂的问题都会暴露出来,对于我们来说是是件好事,在课程设计的过程中特别是对数组和循环有了深刻的理解。通过实际的操作,学会C 语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题,解决问题的能力。

31

课程设计(大作业)报告

课程名称: 程序设计基础 设计题目: 学生成绩记录簿设计 院 系: 信息技术学院 班 级:设 计 者:学 号: xx 指导教师: xx 设计时间:

昆明学院课程设计(大作业)任务书

目录

一.问题的定义 .......................................... 5 二、需求分析 ............................................. 5 三、总体设计 ............................................. 5 四、详细设计 ............................................. 6 五、调试与测试 ........................................ 30 六、结语 ................................................. 31

一.问题的定义

编制一个C 语言成绩记录簿,每个学生信息包括:学号、姓名、C 语言成绩。

要求:

1. 数据存储采用文件形式。 2. 标准的C 语言输入输出 3. 功能完善,适当注释

4. 模块化设计、结构化编程

二、需求分析

系统能实现以下主要功能:

1.系统以菜单方式工作

2. 创建学生成绩信息并以磁盘文件保存;

3. 读取磁盘文件并显示输出所有学生的成绩; 4. 查询学生成绩

(1)按学号查询成绩 (2)学号姓名查询成绩 4.添加成绩记录;

5.修改指定姓名或学号的学生的成绩并可存盘;

6.显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。

三、总体设计

根据系统的要求,系统总体设计如图1所示。

图1 系统总体结构四、详细设计

该部分主要包括:数据结构设计、函数设计(包括函数原型、算法思想、流程描述)、代码设计及程序运行结果显示。

(一) 学生成绩数据结构设计

#include #include #include int i,j,k,y; FILE *fp; Struct stu {

int no;

char name[30]; float cscore; long a;

};struct stu s[100];

(二) 函数设计

1. 主函数

main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。 2. 其他各功能函数

(1) 学生成绩信息录入函数void input() 算法思想:

①依次录入结构体数组中所包含的各个成员;

②直到输入的结构体成员中信息全部为0,数据输入结束;

③返回实际录入的学生成绩信息数。

(2) 将学生成绩信息输出为void output() 算法思想:

①定义结构体变量的指针变量;

②输出所输入的全部信息,若不能输出信息给出提示信息; ③将文件中的信息依次读出,最后结构体的指针为NULL 。

(3)从文件中修改学生成绩信息void modify() 算法思想:

①定义指向结构体变量的指针和指向文件的指针;

②修改方式分为两种(学号和姓名),选择是给出相应的信息; ③将修改后的信息保存,并提示。

3. 流程描述 (1)菜单函数

int fun() { }

int n;

system("cls");

printf("\n\n\t\t\t\t 成绩记录薄");

printf("\n\n\t\t\t"); for(i=0;i

printf("\t\t\t ************菜单*************\n"); printf("\t\t\t* 1、创建学生的信息! \t*\n"); printf("\t\t\t* 2、输出所有学生的信息! \t*\n"); printf("\t\t\t* 3、修改成绩! \t*\n"); printf("\t\t\t* 4、查询! \t*\n"); printf("\t\t\t* 5、显示成绩分段的学生信息!\t*\n"); printf("\t\t\t* 6、学生成绩排名! \t*\n"); printf("\t\t\t* 7、退出成绩记录薄! \t*\n"); printf("\t\t\t");

for(i=0;i

printf("\n\n");

printf("\n\t\t\t 请输入选项:"); scanf("%d",&n); return n;

(2) 学生成绩信息录入函数

void input()

{

system("cls"); i=0; fp=fopen("out.dat","w"); printf("请以0作为输入学生学号信息的结束!\n");

do

{ printf("输入学生的学号:"); scanf("%d",&s[i].no); printf("输入学生的姓名:");

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

printf("输入学生的C 语言成绩:"); scanf("%f",&s[i].cscore);

printf("输入添加成绩的时间:"); scanf("%ld",&s[i].a); if(s[i].no!=0)

fprintf(fp,"%d %-4s %.1f %ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a); }while(s[i].no!=0); fclose(fp);

}

void output() //学生全部信息输出 { if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n"); }

printf("\t\t\t全部的学生信息:\n");

k=0;

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF) {

printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a); k++; } fclose(fp); }

(3)学生信息输出函数

void output() {

if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

}

printf("\t\t\t全部的学生信息:\n");

k=0;

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF) { printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a); k++; } fclose(fp); }

(4)修改学生信息函数 void modify() {

char st[30]; int x,num; float nu; long h; k=0; system("cls");

if((fp=fopen("out.dat","r"))==NULL)

{

printf("Cannot open the file!\n"); return; }

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF) { k++; } fclose(fp);

printf("输入1表示用学号修改,输入2表示用姓名修改!请选择:\n"); scanf("%d",&x); if(x==1) {

printf("请输入修改成绩人的学号:");scanf("%d",&num); for(i=0;i

if(num==s[i].no) { printf("请输入修改的成绩:\n"); scanf("%f",&nu);

s[i].cscore=nu; printf("请输入修改的时间:\n");

scanf("%ld",&h);

s[i].a=h;

fp=fopen("out.dat","w"); for(i=0;i

return;

}

printf("没有找到该生的信息!\n");

return;

if(x==2) {

printf("请输入修改成绩人的姓名:");

scanf("%s",st); for(i=0;i

if(strcmp(s[i].name,st)==0) { printf("请输入修改的成绩:\n"); scanf("%f",&nu);

s[i].cscore=nu; printf("请输入修改成绩的时间:\n");

scanf("%ld",&h); s[i].a=h;

fp=fopen("out.dat","w");

for(i=0;i

fprintf(fp,"%d %s %.1f %ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);

fclose(fp); printf("修改成功\n");

return; }

printf("没有找到该生的信息!\n"); return; }

(5) 代码设计和执行结果

1. 头文件

Struct stu {

int no;/*学号*/

char name[30]; /*姓名*/

float cscore; /*成绩*/

long a; /*时间*/

};struct stu s[100];

/******以下是函数原型*******/

void input() /*输入记录*/

void output()/*输出记录*/

void modify()/*修改记录*/

2. 源程序代码与运行结果

#include

#include

#include

int i,j,k,y;

FILE *fp;

struct stu

定义

{

int no;

char name[30];

float cscore;

long a;

};struct stu s[100];

//结构体函数的

int fun() //目录函数

{

int n; system("cls"); printf("\n\n\t\t\t\t 成绩记录薄"); printf("\n\n\t\t\t"); for(i=0;i

for(i=0;i

printf("*");

} printf("\n\t\t\t 请输入选项:"); scanf("%d",&n); return n;

void input() //输入学生的学号、姓名、成绩信息 {

i=0;

system("cls"); fp=fopen("out.dat","w"); printf("请以0作为输入学生学号信息的结束!\n"); do { printf("输入学生的学号:"); scanf("%d",&s[i].no);

printf("输入学生的姓名:");

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

printf("输入学生的C 语言成绩:");

scanf("%f",&s[i].cscore);

printf("输入添加成绩的时间:");

scanf("%ld",&s[i].a);

if(s[i].no!=0)

fprintf(fp,"%d%-4s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);

}

void output() / /学生全部信息输出

{

if((fp=fopen("out.dat","r"))==NULL) { }while(s[i].no!=0); fclose(fp);

printf("Cannot open the file!\n");

}

printf("\t\t\t全部的学生信息:\n");

k=0;

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

{

printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a);

k++;

}

fclose(fp);

}

void modify() //修改学生信息

{

char st[30]; int x,num; float nu; long h; k=0; system("cls"); if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

return;

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

k++;

} {

fclose(fp);

printf("输入1表示用学号修改,输入2表示用姓名修改!

请选择:\n");

scanf("%d",&x); if(x==1) { printf("请输入修改成绩人的学号:");scanf("%d",&num);

for(i=0;i

fclose(fp); printf("修改成功\n"); return;

printf("没有找到该生的信息!\n"); return; } if(x==2) { printf("请输入修改成绩人的姓名:"); scanf("%s",st); for(i=0;i

printf("修改成功\n"); return; } printf("没有找到该生的信息!\n"); return; }

}

void lookat() //学生信息查询

{

char st[30]; int x,num; k=0; system("cls"); if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

return;

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

{

k++;

} printf("输入1表示用学号查询,输入2表示用姓名查询!请选择:\n");

].a);

scanf("%d",&x); if(x==1) { printf("请输入查询的学号:"); scanf("%d",&num); for(i=0;i

}

if(x==2)

{printf("请输入查询的姓名:");

scanf("%s",st);

for(i=0;i

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

{

printf("%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i

].a);

} return; } printf("对不起,找不到该生!\n"); }

void subsection() //学生成绩分段 {

system("cls"); k=0; if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

k++;

} printf("\t\t\t 90分以上学生的信息!\n"); for(i=0;i=90) printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].csco{ re,s[i].a);

printf("\n\n");

printf("\t\t\t 80到89分学生的信息!\n");

for(i=0;i

if(s[i].cscore=80) printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);

printf("\n\n");

printf("\t\t\t 60到79分学生的信息!\n");

for(i=0;i

if(s[i].cscore>=60&&s[i].cscore

printf("\n\n");

printf("\t\t\t 60分以下学生的信息!\n");

for(i=0;i

if(s[i].cscore

}

void rank() //成绩的排序

{

printf("\n\n"); struct stu t; k=0; system("cls"); if((fp=fopen("out.dat","r"))==NULL) {

printf("Cannot open the file!\n");

}

while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!=EOF)

k++;

{ } for(i=0;i

for(j=i+1;j

if(s[i].cscore

名%d %-4s %.1f %ld\n",i+1,s[i].no,s[i].name,s[i].cscore,s[i].a); }

void choose(int n) //目录的选项

{

system("cls"); switch(n) {

case 1:input(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 2:output(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 3:modify(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 4:lookat(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 5:subsection(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 6:rank(); printf("\n\n\n\n\t\t\t是否返回?输入1表返回,输入2表退出!\n");

scanf("%d",&y);

if(y==1)

choose(fun());break; case 7:exit(0);break; default:printf("\n\n\t\t\t 输入没有的选项,请重新输入!\n");

choose(fun());

}

void main() //主函数 {

}

}

int n; system("cls"); n=fun(); choose(n);

执行结果如图所示:

(1) 菜单

(2)创建学生信息

(3)退出创建学生信息

(4)输出全部的学生信息

(5)用学号修改学生信息

(6)用姓名修改学生信息

(7)没有找到该学生的信息

(8)以开始输入的学生信息作对比

五、调试与测试

起初,我们在运行程序的时候,程序基本上都能运行,并且也都可以达到一些基本的要求,但是在我们做完一项需求的时候,该程序并不能返回到菜单就直接结束了,当再次打开该程序的时候,以前输入的信息都保存了。开始时,我们

以为只是每个程序后面的exit(0);影响了程序不能循环执行,但是当我们把它全部都改为return; 的时候,该程序依然不能循环使用。而在我们与其他程序对比的时候发现,有些程序使用了choose(fun());并且这些程序能够循环使用,于是我们就在我们设计的程序中仿照其他的程序使用了choose(fun());,最终我们的整个程序能够按照题目要求完美运行了。

六、结语

通过这次的课程设计,增加了我对学习C 语言学习的兴趣,虽然还不是真正的明白所有的C 语言的子函数和里面的一些逻辑顺序,但我从C 语言这门课程开始,已经发现程序设计的乐趣,在学习C 语言的过程中也学到了许多计算机应用基础知识,对计算机的运行也有一个大体的了解。这次课程设计经过老师的讲解,自己的查找,在网上的搜索,实现题目上的要求,先做出一些简单的函数和程序,一步步的在做出其它的内容,不过在实际操作过程中犯得一些错误也还是会得到一些意外的收获。在具体的操作中,对这学期的C 语言的理论知识得到巩固,在设计的过程中也发现自己的不足之处,在以后的学习和上机的操作中会更加注意,同时体会到C 语言的简洁和灵活。在上机操作中我们的任何不懂的问题都会暴露出来,对于我们来说是是件好事,在课程设计的过程中特别是对数组和循环有了深刻的理解。通过实际的操作,学会C 语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题,解决问题的能力。

31


相关内容

  • 教务管理系统设计报告
  • 信息系统工程与实践 <教务管理系统> 设计报告 专业班级: 计本1201班 项目分组: 计本1201班第二组 姓名学号1: 戴明昊1205170107 姓名学号2: 杨新芬1205170130 姓名学号3: 万丽涛1205170102 编写人: 戴明昊1205170107 目录 1引言 ...

  • 开题报告--模板
  • 2008级 学士学位毕业论文(设计)材料册 学位申请人姓名 学 号 所在学院名称 专 业 名 称 指导教师姓名 指导教师职称 情 况 说 明 1.<华中师范大学本科毕业论文(设计)开题报告表>:该表于2011年12月31日前完成. 2.<华中师范大学本科毕业论文(设计)指导记录表& ...

  • 教学管理系统
  • 信息管理与决策支持系统论文 教学管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已经逐步成熟.管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相 适应的管理信息系统.教学管理系统是一个教育单 ...

  • 学生成绩管理系统(毕业设计)
  • 贵州教育学院本科毕业论文(设计) 题目: 学生成绩管理系统 学生姓名 XXX 指导教师 XXX老师 专 业 计算机科学与技术 年 级 07级计本班 摘 要:学生成绩管理系统是典型的信息管理系统(MIS),其开发主要包括后 台数据库的建立和维护以及前端应用程序的开发两个方面.经过分析,我们使用 Mic ...

  • 广告策划实训室制度汇编
  • 广告策划实训室 <构成设计实训>教师指导手册 项目名称: 构成设计实训 适用专业: 实训学时: 30学时 指导教师: 二0一二年二月 <构成设计实训>教师指导手册 1.实训项目概况 构成设计实训适用于广告设计与制作.图形图像专业的学生,实训30学时. 2.实训教学目标 (1) ...

  • 学生信息管理系统项目数据库说明书
  • 学生信息管理系统项目 数据库设计说明书 文档作者: 项目组长: 批 准 人: 批准日期: 目 录 目 录 . ............................................................................................... ...

  • 2016届国贸专业毕业综合实践计划
  • 外语外贸分院国际经济与贸易专业 毕业综合实践实施计划 一.毕业综合实践目的和要求 毕业综合实践是实现高职教育培养目标的重要教学环节,在培养学生职业技能和能力.强化职业意识.提高职业素质等方面,具有不可替代的作用.毕业综合实践是高职教育坚持走产学研相结合之路的重要体现,是高职教育特色和质量的重要体现. ...

  • 分析数据流图8
  • 试题1 阅读下列说明和数据流图,回答问题1至问题4,将解答填入答题纸的对应栏内. [说明] 某基于微处理器的住宅安全系统,使用传感器(如红外探头.摄像头等) 来检测各种意外情况,如非法进入.火警.水灾等. 房主可以在安装该系统时配置安全监控设备(如传感器.显示器.报警器等) ,也可以在系统运行时修改 ...

  • 关于发布2014版本科毕业设计(论文)指导意见的通知
  • 成都理工大学 学士学位论文(设计)工作指导意见 ( 2014版 ) 教 务 处 二○一四年四月二十二日 目 录 一.总 则 ························································································ ...