湖北第二师范学院
《程序设计基础》课程设计报告书
题 目: 飞机订票系统
系 部: 计算机
专 业: 系统维护和信息安全
班 级: 08系统维护
姓 名: 李思
学 号: 08D0401008
同组人员: 杨婷、余丽花
指导老师: 鲁静
设计时间: 20##年6月7日 ~2010年7月1日
目 录
1. 课程设计计划·· 3
2. 前言·· 3
3. 需求分析·· 4
4. 概要设计·· 5
5. 详细设计·· 6
6. 技术难点与分析·· 7
7. 心得体会·· 8
8. 致谢·· 9
9. 参考文献·· 9
西安郵電學院
高级语言课程设计报告书
系部名称
学生姓名
专业名称
班 级
学号 电信系 张 杉 电子信息工程 电子0701 05071032
指导教师 衡 霞
20xx年06月09日至
时间
20xx年06月20日
实验题目 学生成绩管理系统
一、实验目的:
(1)本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实
践的机会。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。
(2)C语言的实践。掌握C语言函数的定义方法,函数的声明及函数的调用
过程。掌握结构体类型变量的定义和使用,综合应用C语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。
二、实验内容:
(1)运用结构体数组编辑一个简单的学生成绩管理系统,使之能够完成学
生成绩的创建、添加,查询、修改,删除、统计、排序等操作,并对文件进行保存和读取。
(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直
到编译成功为止。
(3)执行运行操作,逐一对每个模块进行调试。直到全部程序运行成功为
止。
(4)请老师检查,向老师演练此程序,并能回答老师提出的相关问题。
三、 需求分析:
(1)根据学生成绩管理的需要,建立一个“学生信息管理系统”, 系统具
有输入、查询、修改、删除、统计、排序等基本功能;以方便对成绩的各项管理操作。每一条记录包括一个学生的学号、姓名、性别,年龄,生日,成绩。系统的各个功能模块都用函数的形式来实现;可以将学生成绩信息保存在文件中,并从文件中读取出来。有一个清晰美观界面来调用各个功能。
本程序是由C语言的基本单位—函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。本程序分为7个模块,分别为创建学生资料;添加学生的资料; 查询学生的成绩;修改学生的资料;删除学生的资料;统计学生的成绩;对学生的资料进行排序。本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。本程序的使用特别方便,每做完一个模块,下面都有提示信息。使用环境为Win-Tc。
(2)创建该学生成绩管理系统目的就是能够对学生基本信息进行创建、追
加、查询、修改、删除、统计、排序等功能,这样可以简化许多人工做起来很复杂的问题。譬如:“排序”,有了此程序只需将信息输入,计算机就可自动执行,省时、省力。另外,它还可以重复使用,方便、快捷。
(3)该学生基本信息管理系统是在WIN-TC中文简体环境下运行。
该系统要测试的数据如下:
1.输入模块:(输入5个学生的信息)
Number name sex age birthday score 1 a m 20 1988-01-01 60 2 b m 20 1988-02-02 70 3 c f 20 1988-03-03 80
2.追加模块:(再加1个信息)
4 d f 20 1988-04-04 90
3.查询模块:(查询GULI的基本信息)
1 (按学号即可查询)或 a(按姓名也可查询)
4.修改模块:(修改b的成绩)
(输入)1(修改number)(输入)2(修改name)(输入)3(修改sex)(输入)4(修改age) (输入)5(修改birthday)(输入)6(修改score)
5.删除模块:(删除c的基本信息):06(输入学号即可删除)
6.统计模块:可统计各分数的人数。
7.排序模块:按成绩进行排序。
四、概要设计
(1) 主函数结构图:
(2)数据类型:
结构体类型
struct date /*结构体类型*/
{int year; /*结构体变量,用来定义生日中的年*/
??};
struct student_type /*结构体类型*/
{int num; /*结构体变量,用来定义学号*/
char name[10]; /*结构体数组,用来定义姓名*/
??
struct date birth; /*结构体中的结构体*/
};
(3)模块功能详细说明:
1.录入模块:此模块可以连续输入20个学生的资料,若学生数少于20,则可以在输入学号处输入0 便可退出此模块,并把输入的信息保存到e:\\score.txt文件中。
2.输出模块:此模块分两页输出二十名同学的信息。
3.添加模块:输入要添加的学生信息。
4.删除模块:输入要删除的同学学号,然后删除。
5.查询模块:此模块中使用者可以用三种方式查询学生成绩。
分别为(1)按学号查询(2)按姓名查询。
6.修改模块:此模块中可以修改一门科的成绩也可以同时修改四门科的成绩。修改完毕后输入y 可以继续修改,输入n 则退出此模块。
7.删除模块:此模块中用到的删除原理为覆盖要删除的学生的资料。过程简述,先输入要删除的学生的学号,系统找到此学生的信息后给它复制下一个学生的信息,给下一个学生的纪录复制下下一个学生的信息,一直到最后一个学生的信息复制给倒数第二个学生的信息为止。然后文件中的学生总数减一。
8.统计模块:统计一个分数的人数。
9.排序模块:此模块用的方法为冒泡法。
五、详细设计及运行结果
(1)各个模块的程序流程图加模块:
添加模块:
( 2 ) 函数之间相互调用的图示:
2.调试情况:
(1).刚开始时,输入的成绩不能保存在文件中,所有数据都是一次性的。后来知道是没在主程序中加保存模块,添加后就可以了。但调试中又发现在添加模块中加入数据还是不能保存,在老师的帮助下发现问题出现在sum值上,我的添加后sum值不变,导致天价的数据不能保存。我在程序中加了sum++;使每次添加数据后,sum也随之添加。问题就解决了。
(2).删除模块是最头疼的,调试了n多次才成功,问题也出现在sum值上。
(3).其他问题也就在粗心或者简单的错误,印象不是很深刻。
3.自我评价:
在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能 。
本程序是由C语言的基本单位—函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。本程序分为8个模块,分别为(1)录入学生资料。((3)添加学生的资料(4)查询学生的成绩(5)修改学生的资料(6)删除学生的资料(7)统计学生的成绩(8)对学生的资料进行排序。本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。本程序的使用特别方便,每做完一个模块,下面都有提示信息。使用环境为Win-Tc。
此程序的不足之处在学生基本信息方面还不够完善, 另一方面就是在运行此程序时,需要执行操作的提示语不够具体和完善.
改进方法: 可以在学生基本信息的结构体中添加更多的学生信息,使得学生信息更加完善,此外,还可以在编程时加一些必要的提示语,用printf(“”); 语句直接可输入.
4.感受:经过两周的编程实习,并在后一段的报告总结,我对C语言这门科有新的认识。要成功编一套程序,不仅需要有一个整体的思路,更重要的是对基础知识把握一定要扎实。通过编程,对我发现了很多知识上的漏洞和不足,也得到了用诸多C语言解决实际问题的宝贵经验。相信在以后的学习生活包括考试中一定会有很大帮助。
当然我的成绩也离不开老师的热心帮助,不管是粗心造成的错误还是正需本身的错误,老师都耐心给我讲解调试,知道成功运行。我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
七、源程序清单:
#include "stdio.h"
#include "string.h"
#define MAX 20
#define PAGE 10
#define PRINT1 printf(" -------------------------------------------------------------------\n")
#define PRINT2 printf(" num name sex age birthday score \n")
#define PRINT3 printf(" %d %s %c %d %d-%d-%d %d\n",student[i].num,student[i].name,student[i].sex,student[i].age,student
[i].birth.year,student[i].birth.month,student[i].birth.date,student[i].score)
#define PRINT4 printf(" *******************************************************************\n")
int sum;
/*date*/
struct date
{int year;
int month;
int date;
};
/*student struct type*/
struct student_type
{int num;
char name[10];
int sex;
int age;
int score;
struct date birth;
}student[MAX];
/* stone message*/
save_message(int sum)
{
FILE *fp;
int i;
if((fp=fopen("e:\\score.txt","wb"))==NULL)
{
printf("the file you read is wrong1\n");
return;
}
for(i=0;i<sum;i++)
if(fwrite(&student[i],sizeof(struct student_type),1,fp)!=1)
printf("the file you write is wrong!\n");
fclose(fp);
}
/*input message*/
input_message()
{int i=0;
system("cls");
printf("\n\n input student message\n"); PRINT1;
do
{printf(" NO.%d student\n",i+1); printf("\n student number(****):"); scanf("%d",&student[i].num);
if(student[i].num==0)break;
printf("\n student name:");
scanf("%s",&student[i].name);
printf("\n student sex(m/f):"); getchar();
scanf("%c",&student[i].sex);
printf("\n student age:");
scanf("%d",&student[i].age);
printf("\n student birthday(yyyy-mm-dd):");
scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date);
printf("\n student sorce:");
scanf("%d",&student[i].score);
i++;
}while(i<MAX);
printf("\n %dstudents message innput over!--\n",i);
sum=i;
printf("\n press any key back! "); bioskey(0);
}
/*read messang*/
int read_message()
{ FILE *fp;
int i=0;
if((fp=fopen("e:\\score.txt","rb"))==NULL)
{printf("\n\n********&*%%%%%%%%%%%%%%%%press any key*******\n"); return;
}
while(feof(fp)!=1)
{fread(&student[i],sizeof(struct student_type),1,fp);
if(student[i].num==0)break;
else i++;
}
fclose(fp);
return(i);
}
output_message()
{ int i=0,j=0,count,page=1;
system("cls");
printf("\n\n student message from page%d\n\n",page); PRINT2;
PRINT1;
do
{if(student[i].num!=0)
{ j++;
if(j%PAGE!=0)
{
PRINT3;
PRINT1;
}
else
{ PRINT3;
PRINT1;
if(student[i+1].num!=0)
{ printf("press any key continue!");
bioskey(0);
system("cls");
printf("\n\n student message form page%d\n\n",++page); PRINT2;
PRINT1;
}
}
}
i++;
} while(student[i].num!=0);
printf("press any key back!");
bioskey(0);
}
insert_message()
{int i=sum,j,flag=0;
char choice;
system("cls");
printf("\n\n Insert a mew student\n");
PRINT1;
do
{printf("\n new student number:");
scanf("%d",&student[i].num);
printf("\n student name:");
scanf("%s",&student[i].name);
getchar();
printf("\n student sex:");
scanf("%c",&student[i].sex);
getchar();
printf("\n student age:");
scanf("%d",&student[i].age);
getchar();
printf("\n student birthday:");
scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date);
getchar();
printf("\n student score:");
scanf("%d",&student[i].score);
PRINT4;sum++;
printf(" continue?(y/n)");
choice=getch();
if(choice=='y'||choice=='Y')
{printf("\n continue!");
i++;
flag=1;
} else flag=0;
}while(flag==1);
save_message(sum);
printf("\n press any key back!");
bioskey(0);
}
/*delete message*/
del_message()
{
int i,j,t,choice1;
char choice2;
system("cls");
printf(" \n\n\n\n *******************************************************************");
printf(" please input the number of student you
want to delete: ");
scanf("%d",&choice1);
for(i=0;i<sum;i++)
{
if(student[i].num==choice1)
{t=i;
break;
}
}
PRINT4;
PRINT1;
PRINT2;
PRINT1;
PRINT3;
PRINT1;
getchar();
for(i=t;i<sum;i++)
{ j=i+1;
student[i]=student[j];
}
sum=sum-1;
printf("the information of this student has deleted!"); bioskey(0);
}
/*revise message*/
revise_message()
{int i=0,choice,revise_num,flag;
do
{ system("cls");
printf("\n input student number:"); scanf("%d",&revise_num);
for(i=0;i<sum;i++)
if(student[i].num==revise_num)
{printf("\n --student message--\n"); PRINT1;
PRINT2;
PRINT3;
printf("\n which do you want to revise?\n"); printf("\n 1.number\n");
printf("\n 2.name\n");
printf("\n 3.sex\n");
printf("\n 4.age\n");
printf("\n 5.birthday\n");
printf("\n 6.score\n");
printf("\n select(1-6):");
scanf("%d",&choice);
switch(choice)
{case 1:printf("\n input reviesd number:");
scanf("%d",&student[i].num);break;
case 2:printf("\n input reviesd name:");
scanf("%s",&student[i].name);break;
case 3:printf("\n input reviesd sex:");
getchar();
scanf("%c",&student[i].sex);break;
case 4:printf("\n input reviesd age:");
scanf("%d",&student[i].age);break;
case 5:printf("\n input reviesd birthday:");
scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date);break;
case 6:printf("\n input reviesd score:");
scanf("%d",&student[i].score);break;
}
PRINT1;
PRINT2;
PRINT3;
break;
}
if(i==sum)
{printf(" the student doesn't exsit!");
bioskey(0);
}
printf("\n\n continue?(y/n)");
choice=getch();
if(choice=='y'||choice=='Y')
{flag=1;
printf("\n continue!");
}
else flag=0;
}
while(flag==1);
printf("\n press any key back!");
bioskey(0);
}
renew_message()
{int choice;
do
{
system("cls");
printf("\n\n\n **************renew student message**************\n\n\n");
printf(" 1.insert student message\n\n"); printf(" 2.delete student message\n\n"); printf(" 3.revise student message\n\n"); printf(" 0.back\n\n");
printf(" select(0-3):");
scanf("%d",&choice);
switch(choice)
{case 1:insert_message();break;
case 2:del_message();break;
case 3:revise_message();break;
case 0:break;
}
}
while(choice!=0);
}
/*inquire by name*/
inquire_name()
{ int i,choice,j=0;
char inquire_name[10];
system("cls");
printf("\n input student name:");
scanf("%s",&inquire_name);
for(i=0;i<sum;i++)
if(strcmp(student[i].name,inquire_name)==0&&student[i].num!=0) {printf("\n --student message--\n");
PRINT1;
PRINT2;
PRINT3;
}
else j++;
if(j==sum)
printf("\n the student doesn't exisit");
bioskey(0);
}
/*inquire by num*/
inquire_num()
{ int i,choice,j=0;
char inquire_num;
system("cls");
printf("\n input student number:");
scanf("%d",&inquire_num);
for(i=0;i<sum;i++)
if(student[i].num==inquire_num&&student[i].num!=0)
{printf("\n --student message--\n");
PRINT1;
PRINT2;
PRINT3;
}
else j++;
if(j==sum)
printf("\n the student doesn't exisit");
bioskey(0);
}
inquire_message()
{ int choice;
do
{ system("cls");
printf("\n\n\n *************inquire student message**********\n\n");
printf(" 1.inquire by name\n\n");
printf(" 2.inquire by num\n\n");
printf(" 0.back\n\n");
printf(" select(0-2):");
scanf("%d",&choice);
switch(choice)
{case 1:inquire_name();break;
case 2:inquire_num();break;
case 0:break;
}
}while(choice!=0);
}
count_message()
{ int i,choice,j=0,count_score,num=0;
system("cls");
printf("input the score you want to count:\n");
scanf("%d",&count_score);
printf("\n the results \n\n\n");
PRINT2;
for(i=0;i<sum;i++)
if(student[i].score==count_score)
{
num++;
PRINT3;
}
else j++;
printf("\n score number \n");
printf("%15d%13d",count_score,num);
if(j==sum)
printf(" \n the score is not exist,press anykey to return \n\n");
bioskey(0);
}
sort_message()
{ struct student_type *p,*q[MAX];
int i,j,k;
system("cls");
printf("\n\n\n sort by score: \n");
PRINT1;
printf("\n rank---number----name---sex---score\n\n\n"); PRINT1;
p=student;
for(i=0;i<sum;i++)
q[i]=p++;
for(i=0;i<sum;i++)
{
k=i;
for(j=i+1;j<sum;j++)
if(q[k]->score<q[j]->score) k=j;
if (k!=i)
{
p=q[i];q[i]=q[k];q[k]=p;
}
}
for(i=0;i<sum;i++)
printf("\n %4d %6d %s %c %d",i+1,q[i]->num,q[i]->name,q[i]->sex,q[i]->score);
bioskey(0);
}
/*main */
main()
{ int choice,i=0;
char tt[20];
char t;
char screat[]="05071032";
sum=read_message();
bioskey(0);
system("cls");
printf("\n\n\n please input the password:");
t=getch();
while(t!='\r')
{
printf("*");
tt[i]=t;
i++;
t=getch();
}
tt[i]='\0';
if(strcmp(screat,tt)!=0)
{
printf("\n error!");
exit(0);
}
do
{ system("cls");
printf("\n\n
*************************************\n");
printf(" * students message system *\n"); printf("
*************************************\n\n");
printf(" 1.input message\n\n\n"); printf(" 2.output message\n\n\n"); printf(" 3.renew messagen\n\n\n"); printf(" 4.inquire message\n\n\n"); printf(" 5.count message\n\n\n"); printf(" 6.sort message\n\n\n"); printf(" select(0-6):");
scanf("%d",&choice);
switch(choice)
{case 1:input_message();break;
case 2:output_message();break;
case 3:renew_message();break;
case 4:inquire_message();break;
case 5:count_message();break;
case 6:sort_message();break;
case 0:break;
}
}while(choice!=0);
save_message(sum);
}
东莞理工学院C语言程序设计课程设计题目院系专业年级班别指导教师组长同组成员图书信息管理系统电子工程学院电子信息工程20xx2班侯家…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录…
大连交通大学软件学院C语言课程设计报告SOFTWAREINSTITUTEOFDALIANJIAOTONGUNIVERSITYEXP…
海南大学三亚学院信息管理与信息系统专业课程设计实验报告题目C语言程序设计实习分院管理分院专业信息管理与信息系统班级信管0902姓名…
3130111103福建工程学院C语言课程设计报告班级机械1301学号姓名指导教师日期20xx123020xx1331301111…
沈阳航空航天大学课程设计报告课程设计名称C语言课程设计课程设计题目猜数游戏院系计算机学院专业计算机科学与技术班级04010101学…
大连交通大学软件学院C语言课程设计报告SOFTWAREINSTITUTEOFDALIANJIAOTONGUNIVERSITYEXP…