程序的设计基础课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(大作业)报告
课程名称:程序设计基础
设计题目:学生成绩记录薄设计
院系:信息技术学院
班级:
设计者:
学号:
指导教师:
设计时间:2013.7 8.-2013.7.13
信息技术学院
学院课程设计(大作业)任务书
学生成绩记录薄设计
一、课程设计目的与要求
1.课程设计目的
(1)综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。
(2)充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main()在程序设计中的实现思路和方法。
2. 课程设计要求
设计一个简易学生成绩记录簿设计,其中包括:,学号,C语言成绩;
具体功能:
1.系统以菜单方式工作
2. 创建学生成绩信息并以磁盘文件保存;
3. 读取磁盘文件并显示输出所有学生的成绩;
4. 查询学生成绩
(1)按学号查询成绩
(2)学号查询成绩
5.添加成绩记录;
6.修改指定或学号的学生的成绩并可存盘;
7.显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。
二、总体设计
图1 系统总体结构
三、详细设计
1、数据结构设计
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int n=4;
struct student
{
int num; /*学号*/
char name[10]; /**/
float score[3]; /*成绩*/
}
2.函数说明
1.主函数
main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。
2.其他部分功能函数包括
(1) 将学生成绩信息保存为文件void save();
算法思想:
①定义指向文件的指针变量;
②输入保存路径及文件名,打开文件,若不能打开文件给出提示信息;
③将存有学生成绩信息的结构体数组信息依次保存到文件中。
(2)学生成绩信息录入函数void input()
算法思想:
①依次录入结构体数组中所包含的各个成员;
②直到输入的结构体成员息为4,数据输入结束;
③返回实际录入的学生成绩信息数。
(3)从文件中读出学生成绩信息void output();
算法思想:
①定义指向结构体变量的指针和指向文件的指针;
②输入文件的路径,打开文件,若不能打开文件给出提示信息;
③将文件中的信息依次读出,最后结构体的指针为NULL。
3.函数设计
(1)主菜单函数main()
功能:函数返回值为整数,代表所选的菜单项
int main ()
{
printf(" *********************************************************
\n");
printf(" §
§\n");
printf("§<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>§\n");
printf(" § >>欢迎进入学生成绩记录系统<< §
\n");
printf(" §>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<< §\n");
printf(" § §\n");
printf("§【1】-------------------------- 创建学生成绩信息
§\n");
printf(" § §\n");
printf("§【2】-------------------------- 显示所有学生成绩信息
§\n");
printf("§
§\n");
printf("§【3】-------------------------- 添加学生成绩信息
§\n");
printf(" § §\n");
printf("§【4】-------------------------- 查询学生成绩信息
§\n");
printf(" § §\n");
printf("§【5】-------------------------- 修改学生的信息
§\n");
printf(" § §\n");
printf("§【6】-------------------------- 按分数段显示学生的信息
§\n");
printf(" § §\n");
printf("§【0】-------------------------- 退出
§\n");
printf(" § §\n");
printf(" *********************************************************
\n");
printf(" 请输入相应菜单编号: ");
}
(2)我负责编写的程序
A.添加学生信息
void Addstudent()
{
FILE *fp;
struct student s;
fp=fopen("stu.dat","ab");
if((fp=fopen("stu.dat","ab"))==NULL)
printf("File open error!\n");
else
{
printf("请输入所增加学生的学号 c语言成绩:\n");
scanf("%d",&s.num );
scanf("%s",);
scanf("%f",&s.score[0]);
fwrite (&s,sizeof(struct student),1,fp);
fclose(fp);/*关闭文件*/
}
printf("写入成功!\n");
}//end function Addstudent;
B.修改学生成绩
void modify()
{
int number,i;
printf("请输入要修改信息的学生学号:");
scanf("%d",&number);
for(i=0;i<n;i++)
if(number==stud[i].num)
break;/*查找判断*/
if(i<n)/*查找判断*/
{
printf("请输入修改后的学生的信息:");
printf("\n请输入学生的c语言成绩:");
scanf("%f",&stud[i].score[0]);
save();
}
else
printf("没找到该学生的信息\n");
system("paues");system("cls");
}
C.查询学生成绩
void namecheck(void);
void scorecheck(void);
void searchmenu()
{ printf(" ***** 欢迎进入学生成绩查询系统 ****** \n");
printf("* 1------------------按查询成绩 * \n");
printf("* 2-----------------按学号查询成绩 * \n");
printf("* 3-----------------返回上一层 * \n");
printf("* 4------------------退出 * \n");
printf(" ************************************* \n");
printf(" 请输入相应菜单编号: ");
int m;
scanf("%d",&m);
switch(m)
{
case 1: namecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 2: scorecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 3: main();break;
case 4: exit(0); break;
}
}
void namecheck()
{
char name[10];
printf("按照查询请按\n");
printf("\n请输入:");
scanf("%s",&name);
printf("查询结果\n");
printf("学号 c语言成绩\n");
if(strcpy(stud[i].name,name))
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
void scorecheck()
{
int b;
printf("按照学号查询请按\n");
{
printf("\n请输入学号:");
scanf("%d",&b);
printf("查询结果\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
if(stud[i].num ==b)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
}
四、程序清单和执行结果
1.头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int n=4;
struct student
{
int num; /*学号*/
char name[10]; /**/
float score[3]; /*成绩*/
/******以下是函数原型*******/
void save(void);
void input(void);
void output(void);
void modify(); /*修改信息*/
void searchmenu(void); /*查询信息*/
void namecheck(void); /*按查询*/
void scorecheck(void); /*按学号查询*/
void Addstudent(); /*添加信息*/
void sclsearch(); /*成绩按分数段显示*/ 2.函数源程序代码与运行结果
[1]函数源程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int n=4;
struct student
{
int num;
char name[10];
float score[3];
}stud[100];
int i,choose,a,t=0;
long int num;
int main ()
{
void save(void);
void input(void);
void output(void);
void modify();
void searchmenu(void);
void Addstudent();
void sclsearch();
while(1)
{
printf(" *********************************************************
\n");
printf(" §
§\n");
printf("
§<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>§\n");
printf(" § >>欢迎进入学生成绩记录系统<< §
\n");
printf(" §>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<
§\n");
printf(" § §\n");
printf(" §【1】-------------------------- 创建学生成绩信息§
\n");
printf(" § §\n");
printf(" §【2】-------------------------- 显示所有学生成绩信息§
\n");
printf(" § §\n");
printf(" §【3】-------------------------- 添加学生成绩信息§
\n");
printf(" § §\n");
printf(" §【4】-------------------------- 查询学生成绩信息§
\n");
printf(" § §\n");
printf(" §【5】-------------------------- 修改学生的信息§
\n");
printf(" § §\n");
printf(" §【6】-------------------------- 按分数段显示学生的信息§
\n");
printf(" §
§\n");
printf(" §【0】-------------------------- 退出§
\n");
printf(" § §\n");
printf(" *********************************************************
\n");
printf(" 请输入相应菜单编号: ");
scanf("%d",&a);
switch(a)
{
case 1:
input();
save();
break;
case 2:
output();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 3:
Addstudent();
printf("\n");
system("PAUSE");
system("CLS"); break;
case 4:
searchmenu();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 5:
modify();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 6:
sclsearch();
printf("\n");
system("PAUSE");
system("CLS"); break;
case 0:exit(0);
default: ;
}
}
return 0;
}
void save()
{
FILE *fp;
if ((fp=fopen("stu.dat","wb"))==NULL)/*以只写的方式打开文件*/
{
printf("无法打开文件!\n");
return ;
}
for(i=0;i<n;i++)
if (fwrite (&stud[i],sizeof(struct student),1,fp)!=1)/*写入字节为1的信息在文件中*/
printf("文件写入错误!\n");
fclose(fp);/*关闭文件*/
}
void input()//录入学生成绩
{
int i;
char a;
for(i=0;i<n;i++)
{
printf("\n 请输入学生成绩信息:\n");
printf("\n请依次输入学号、、c语言成绩:\n");
scanf("%d%s%f",&stud[i].num,stud[i].name,&stud[i].score[0]);
printf("输入:y(继续),n(终止)!\n");
fflush(stdin);
scanf("%c",&a);
if(a=='n' || a=='N')
break;
}
n=i+1;
}
void Addstudent()
{
FILE *fp;
struct student s;
fp=fopen("stu.dat","ab");
if((fp=fopen("stu.dat","ab"))==NULL)
printf("File open error!\n");
else
{
printf("请输入所增加学生的学号 c语言成绩:\n");
scanf("%d",&s.num );
scanf("%s",);
scanf("%f",&s.score[0]);
fwrite (&s,sizeof(struct student),1,fp);
fclose(fp);/*关闭文件*/
}
printf("写入成功!\n");
}//end function Addstudent;
void output()
{
int i;
//float s;
FILE *fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("\n学号 c语言成绩\n");
for(i=0;fread(&stud[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d %10s % 10.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
fclose(fp);
n=i;
}
void modify()
{
int number,i;
printf("请输入要修改信息的学生学号:");
scanf("%d",&number);
for(i=0;i<n;i++)
if(number==stud[i].num)
break;/*查找判断*/
if(i<n)/*查找判断*/
{
printf("请输入修改后的学生的信息:");
printf("\n请输入学生的c语言成绩:");
scanf("%f",&stud[i].score[0]);
save();
}
else
printf("没找到该学生的信息\n");
system("paues");system("cls");
}
void namecheck(void);
void scorecheck(void);
void searchmenu()
{ printf(" ***** 欢迎进入学生成绩查询系统 ****** \n");
printf("* 1------------------按查询成绩 * \n");
printf("* 2-----------------按学号查询成绩 * \n");
printf("* 3-----------------返回上一层 * \n");
printf("* 4------------------退出 * \n");
printf(" ************************************* \n");
printf(" 请输入相应菜单编号: ");
int m;
scanf("%d",&m);
switch(m)
{
case 1: namecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 2: scorecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 3: main();break;
case 4: exit(0); break;
}
}
void namecheck()
{
char name[10];
printf("按照查询请按\n");
printf("\n请输入:");
scanf("%s",&name);
printf("查询结果\n");
printf("学号 c语言成绩\n");
if(strcpy(stud[i].name,name))
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
void scorecheck()
{
int b;
printf("按照学号查询请按\n");
{
printf("\n请输入学号:");
scanf("%d",&b);
printf("查询结果\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
if(stud[i].num ==b)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
}
void sclsearch()
{
int i;
printf("90分以上:\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=90)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("80~89:\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=80&&stud[i].score[0]<90)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("70~79:\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=70&&stud[i].score[0]<80)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("60~69:\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=60&&stud[i].score[0]<70)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("60分以下:\n");
printf("学号 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]<60)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
(1)系统以菜单方式工作
(2)学生成绩录入
(3)显示所有学生成绩
(4)查询学生成绩按查询
按学号查询
(5)修改学生成绩
(6)按分数段显示学生成绩
五、调试与测试
我在调试我编写的程序当中出现了很多问题,比如,按查询学生成绩中if(strcpy(stud[i].name,name)),开始我写成了stud[i].name=name,怎么改都有错误,无奈之下请教了同学,最后在同学的帮助下改对了,原来这需要使用strcpy函数才能实现。
可以说出的问题还是蛮多的。
好不容易改对了一个,有出现了新的错误,就是输入后,所有学生的成绩都显示了,还把其他学生的改成了我输入的那个,最后人真的检查了一遍才发现多了一条语句for(i=0;i<n;i++)。
这些问题还是给我留下了很深的映象,也提醒了我基础知识不踏实的警钟,所以期末考试之前我一定要好好复习了!
六、结语
通过一周C语言课程设计,不仅使我们更加牢固地掌握了程序设计的知识,也让自己深刻的认识到自己的不足与缺点,有许多知识都存在不是完全了解及掌握,这一系列的问题通过自己上机操作已经减少了很多。
这我明白光靠书本上学习的和老师讲的是不够,有许多知识是需要我们去实践才能学到的(比如:在调试的过程中我发现自己在编程这方面的缺点与不足)这不断完善了自己,也不断丰富了自己对于C语言的了解和掌握。
而且这让自己明白和体会到了C语言其实具有语句简洁,使用灵活,执行效率高等特点。
与此同时,还让我明白了不懂就问的重要性。
现在的我们总是太过于要面子,羞于问别人,总觉得这个问题会不会太白痴了,别人会不会嘲笑我。
其实这些只是我们自己想太多了而已,老师和同学都很热情的,他们都很乐意教我们的。
有团队合作的精神也非常的重要,有些问题光靠自己力量做太过于单薄,团队合作显得尤为重要。
在这次合作中,我从同伴身上学到了很多自己身上缺少的优点,比如细心,我做事有些太过于粗心,总是在一些小的地方不够认真,使程序出现了许多的小错误,幸好在同伴的帮助顺利的解决了这些问题。
总之,上机的实训可以让我们通过实际操作,更加深刻的学会 C语言程序编程的基本步骤、基本方法。
也增强了自己的动手与实践能力。
希望以后多一些这样的实训,让我不断地提高。