课程设计(大作业)报告
课程名称: 程序设计基础 设计题目: 学生成绩记录簿设计 院 系: 信息技术学院 班 级:设 计 者:学 号: 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