程序设计实训报告
题目:车站售票管理系统
姓名:
学号:
班级:
同组者:
中国石油大学(华东)
20xx年9月
实训内容
要求(题目要求,我的任务):
题目要求:设计一个车站售票管理系统,实现售票管理的自动化,主要任务是用计算机对每个汽车班次的信息进行管理,包括用户验证、班次数据维护、售票管理等模块,实现班次信息的录入、修改、删除、查询以及售票、退票和售票统计等一系列功能。要求用键盘以选择菜单方式工作。
我的任务:
数据格式
用户数据:包括用户名char(10)、密码char(10)、用户类型(A:管理员,S:售票员)char(1)
汽车班次数据:班次char(10)、到站char(10)、发车时间char(6)、票价、座位数、剩余票数
数据文件
用户数据文件user.txt,保存系统用户数据,每个用户的数据为一条记录
班次数据文件bus.txt,存放车站的发车班次数据,每个班次的数据为一条记录
售退票管理(售票员)
售票:首先根据到站地点和发车时间查询班次及剩余票数,若存在并且剩余票数大于购票数,则售票并计算出票价,否则,给出提示信息
退票:根据班次进行退票处理
统计:统计输出当日到达各地的班次、售票数、金额
分析设计:
变量的命名和标识符
在程序中可以改变其值的量称为变量。变量名是标识符。
变量是用与储存数据的,因此每个变量必须属于某种类型。而且,在程序中,使用变量之前必须将其申明为某种数据类型。
数组的定义
定义一维数组的一般方法是:
类型说明 数组名称【数组长度】
C语言中,定义数组时必须给出明确的数据类型说明和数组长度。
void ticketMenu()
{
char choice, ans;
system("cls");
printf("\n\n\t\t 售 退 票 管 理");
printf("\n\t\t=======================\n");
printf("\n\t\t 1. 售票处里\n");
printf("\n\t\t 2. 退票处理\n");
printf("\n\t\t 3. 查询班次\n");
printf("\n\t\t 4. 售票统计\n\n");
printf("\n\t\t 0. 退出系统");
printf("\n\n\t\t=======================\n");
printf("\n\t\t 请选择(0 ~ 4):");
fflush(stdin);
choice=getchar();
售退票管理主菜单
用运选择程序设计中的IF语句,
算法如下:
第一步,输入 choice
第二步,判断choice-49==0;如果正确,售票,结束;如果错误,进行第三步; 第三步,判断choice-50==0;如果正确,退票,结束;如果错误,进行第四步; 第四步,判断choice-51==0;如果正确,查询,结束;如果错误,进行第五步; 第五步,判断choice-52==0;如果正确,统计,结束;如果错误,进行第六步; 第六步,如果输入小于48或大于52,显示选择错误,请重新选择! 清除键盘缓存,
选择成功后,显示你确定要退出系统吗?
用运if语句,选择no,返回主菜单;选择yes,退出系统。
关键代码实现说明:
//售退票管理主菜单
void ticketMenu()
{
char choice, ans;
system("cls");
printf("\n\n\t\t 售 退 票 管 理");
printf("\n\t\t=======================\n");
printf("\n\t\t 1. 售票处理\n");
printf("\n\t\t 2. 退票处理\n");
printf("\n\t\t 3. 查询班次\n");
printf("\n\t\t 4. 售票统计\n\n");
printf("\n\t\t 0. 退出系统");
printf("\n\n\t\t=======================\n");
printf("\n\t\t 请选择(0 ~ 4):");
fflush(stdin);
choice=getchar();
//根据用户选择分别调用以下函数
if(choice-49==0)
saleTicket(); //售票
if(choice-50==0)
backTicket(); //退票
if(choice-51==0)
queryTicket(); //查询
if(choice-52==0)
staticTicket(); //统计
//退出或返回重新选择
{ if(ans!='y' && ans!='Y') { if(choice<48||choice>52)
choice='A';
//输入其它选择,执行以下代码,以返回主菜单让用户重新选择 printf("\n\t\t选择错误,请重新选择!");
fflush(stdin);
ticketMenu();
} printf("\n\t\t你确定要退出系统吗(Y/N)?"); }
fflush(stdin);
ans=getchar();
if(ans=='n'||ans=='N')
ticketMenu(); if(ans=='y'||ans=='Y') exit(0);
}
int main()
{
char userType=0;
userType=userLogin();
if(userType=='A' || userType=='a') busMenu();
else if(userType=='S' || userType=='s') ticketMenu();
return 0;
}
总结
通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,
但从C语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多
计算机应用基础知识,对计算机的机体也有了一个大体的了解。
这次实训是老师给了范例程序,经过自己的改写,实现要求。先做数据格式与数据文件,
再做售退票管理(售票员)。在实际操作过程中犯的一些错误还会有意外的收获,感觉实训
很有意思。
通过实训,加深对课堂讲授内容的理解 课堂上要讲授许多关于c语言的语法规则,听
起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了实在的把握,对C语言
的知识从理论到了实际应用。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C
语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对
数组和循环有了深刻的理解。
通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能
力,培养了分析问题、解决问题的能力。深刻体会到团队精神的含义和当代我们党和国家大
力倡导人与人协作的寓意。大到载人航天精神,小到程序设计实训中的3人小组,团队合作精神都是核心,都是战斗力。自己对C语言的掌握外加团队精神,这次实训收获良多。
附录(源程序代码):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 50
//声明用户数据类型
typedef struct
{
char uname[10];
char pwd[10];
char utype;
} USER[10];
//声明汽车班次数据类型
typedef struct
{
char num[10];
//声明其它成员
} BUS;
//班次信息管理主菜单
void busMenu()
{
char choice, ans;
system("cls");
printf("\n\n\t\t 班 次 管 理");
printf("\n\t\t=======================\n");
printf("\n\t\t 1. 添加班次\n");
printf("\n\t\t 2. 修改班次\n");
printf("\n\t\t 3. 删除班次\n");
printf("\n\t\t 4. 查询班次\n");
printf("\n");
printf("\n\t\t 0. 退出系统");
printf("\n\n\t\t=======================\n");
printf("\n\t\t 请选择(0 ~ 4):");
fflush(stdin);
choice=getchar();
//根据用户选择分别调用以下函数
if(choice-49==0)
addBus(); //添加班次信息
if(choice-50==0)
modifyBus(); //修改班次信息
if(choice-51==0)
deleteBus(); //删除班次信息
if(choice-52==0)
queryBus(); //查询班次信息
//对于选择退出,执行以下代码
if(choice<48||choice>52)
{
if(ans!='y' && ans!='Y')
{
choice='A';
//输入其它选择,执行以下代码,以返回主菜单让用户重新选择 printf("\n\t\t选择错误,请重新选择!");
fflush(stdin);
busMenu();
}
}
printf("\n\t\t你确定要退出系统吗(Y/N)?");
fflush(stdin);
ans=getchar();
if(ans=='n'||ans=='N')
busMenu();
if(ans=='y'||ans=='Y')
exit(0);
}
//售退票管理主菜单
void ticketMenu()
{
char choice, ans;
system("cls");
printf("\n\n\t\t 售 退 票 管 理");
printf("\n\t\t=======================\n");
printf("\n\t\t 1. 售票处理\n");
printf("\n\t\t 2. 退票处理\n");
printf("\n\t\t 3. 查询班次\n");
printf("\n\t\t 4. 售票统计\n\n");
printf("\n\t\t 0. 退出系统");
printf("\n\n\t\t=======================\n");
printf("\n\t\t 请选择(0 ~ 4):");
fflush(stdin);
choice=getchar();
//根据用户选择分别调用以下函数
if(choice-49==0)
saleTicket(); //售票
if(choice-50==0)
backTicket(); //退票
if(choice-51==0)
queryTicket(); //查询
if(choice-52==0)
staticTicket(); //统计
//退出或返回重新选择
if(choice<48||choice>52)
{
if(ans!='y' && ans!='Y')
{
choice='A';
//输入其它选择,执行以下代码,以返回主菜单让用户重新选择 printf("\n\t\t选择错误,请重新选择!");
fflush(stdin);
ticketMenu();
}
}
printf("\n\t\t你确定要退出系统吗(Y/N)?");
fflush(stdin);
ans=getchar();
if(ans=='n'||ans=='N')
ticketMenu();
if(ans=='y'||ans=='Y')
exit(0);
} int main()
{
char userType=0;
userType=userLogin();
if(userType=='A' || userType=='a') busMenu(); else if(userType=='S' || userType=='s') ticketMenu(); return 0;
}
第二篇:C语言程序设计实习报告---学生信息管理系统
C程序设计报告
数据结构课程设计报告
姓名:
学号:
班级:
20xx年6月8日
C程序设计报告
1. 题目和要求:
1.1问题提出与要求:
学生成绩管理系统
[要求]
设计一个学生成绩管理系统,对在校某班学生几门课程的考试成绩进行统一管理。每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放。
(1)一个文件按以班为单位存储学生记录。
(2)将允许的操作分为六种
A:插入一个新的学生记录(录入学生信息)
B:修改学生记录
C:删除一个学生记录
D:登记成绩
E:修改成绩
F:浏览全班成绩
(3)计算学生的总成绩
(4)输出全班成绩表
1.2需求分析.
根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.
2.功能实现设计:
2.1总体设计:
C程序设计报告
分析系统:根据题目的需求分析,可将这个系统设计为六大模块(见下图):插入学生信息,修改,删除,登记,浏览,统计。
2.2详细设计:
1、主函数
主函数设计得比较简洁,只提供输入、功能处理和输出部分的函数调用。其中各功能模块用菜单方式选择;其流程图如下:
C程序设计报告
[程序]
void main()
{
int a;
do
{
printf("\t\t\t\t\n");
printf("\t\t\t\t学生成绩管理系统\n");
printf("\n");
printf("\t\t\t作者:梁天江 班级:072084-31 学号:20081004528\n"); printf("\t\t\t-------------------------------------------\n\n");
printf("\t 1.插入新的学生记录\n");
printf("\t 2.修改学生记录\n");
printf("\t 3.删除学生记录\n");
printf("\t 4.显示学生成绩和总分\n");
printf("\t 5.浏览全班成绩\n");
printf("\t 6.退出\n\n");
printf(" 输入你要操作的序号 : ");
scanf("%d",&a);
switch(a)
{
case 1:printf("\n");input();break;
case 2:printf("\n");change();break;
case 3:printf("\n");del();break;
case 4:printf("\n");allgrade();break;
case 5:printf("\n");paixu();break;
case 6:printf("\n");exit(0);break;
default:printf("\nThe choice is between 1 to 6.\n");
}
}while(a!=0);
2、各功能模块设计
C程序设计报告
(1)插入模块
void input()
{
int j;
char ch[20];
printf("\n输入学生信息:\n");
do
{
printf("\n学号: ");
scanf("%s",stu[k].num);
printf("\n姓名: ");
scanf("%s",stu[k].name);
printf("\n年龄: ");
scanf("%d",&stu[k].age);
for(j=0;j<3;j++)
{ printf("\n成绩%d: ",j+1);
scanf("%d",&stu[k].grade[j]); }
k++;
printf("\n如要继续,请输入学生信息(y/n): ");
scanf("%s",ch);
}
while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);
outputgrade();
}
void outputgrade()
{
int i;
printf(" 学生信息是:\n");
for(i=0;i<k;i++)
{
printf("\t%s \t%s \t%d \t%d
\t%d",stu[i].num,stu[i].name,stu[i].age,stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
printf("\n");
}
}
(2)修改模块
\t%d
C程序设计报告
void change()
{
int i,j;
char a[20],ch[10];
printf("\n输入你要修改的学生学号:");
scanf("%s",a);
for(i=0;i<k;i++)
{
if(strcmp(stu[i].num,a)==0)
{
printf("\n你确定要修改学号吗?(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { scanf("%s",stu[i].num);}
printf("\n你确定要修改学生姓名吗?(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nnum:"); printf("\nname");
C程序设计报告
scanf("%s",stu[i].name);}
printf("\n你确定要修改学生成绩吗?(y/n): ");
scanf("%s",ch);
printf("\n");
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
for(j=0;j<3;j++)
{
printf("grade%d:",j+1); scanf("%d",&stu[i].grade[j]); printf("\n"); }
}
}
outputgrade();
}
(3)删除模块
void del()
{
C程序设计报告
int i,j;
char c[20];
printf("\n输入你要删除的学生学号 :\n");
printf("num:");
scanf("%s",&c);
for(i=0;i<3;i++)
if(strcmp(c,stu[i].num)==0) break;
for(j=i;j<=2;j++)
stu[j]=stu[j+1];
printf("\t\t\t你已经删除 %s的信息\n",c);
k--;
outputgrade();
}
(4)显示模块 (显示学生成绩总分)
void allgrade()
{ int i; float sum=0;
for(i=0;i<k;i++)
{ printf("\t%d \t%d \t%d\n",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]); sum=sum+stu[i].grade[0]+stu[i].grade[1]+stu[i].grade[2] ; }
printf("总成绩是 %f",sum);
}
(5)浏览模块(浏览全班学生成绩并按学号排序)
void paixu()
{ struct student temp;
int i,j;
for(i=0;i<k-1;i++)
{
for(j=i+1;j<k;j++)
{
if(stu[i].num<stu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
} }
outputgrade();
}
C程序设计报告
2.上机操作
1、数据源
全班学生信息文件student.txt格式:每行储存一个学生信息,内容包括学生学号、姓名、年龄、数学成绩、英语成绩、物理成绩。例如:
01 zhao 18 90 80 85
2、编译、链接和运行(略)
3、结果
(1)主菜单函数
效果如下图所示:
(2)插入模块
C程序设计报告
在主界面出现后输入1回车,即可插一个学生信息,包括学号、姓名、年龄、数学、英语、物理成绩。如下图所示:
(3)修改模块
C程序设计报告
(4)删除模块
(5)显示模块(显示全班学生成绩和总分)
C程序设计报告
(6)浏览模块
C程序设计报告
4.下面附上此次C语言课程设计的源程序 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct student
{ char num[10];
char name[12];
int age;
int grade[3];
}stu[20];
int k=0;
void input();
void outputgrade();
void change();
void del();
void allgrade();
void paixu();
void main()
{
int a;
do
{
printf("\t\t\t\t\n");
printf("\t\t\t\t学生成绩管理系统\n");
printf("\n");
printf("\t\t\t作者:梁天江 班级:072084-31 学号:20081004528\n"); printf("\t\t\t-------------------------------------------\n\n");
printf("\t 1.插入新的学生记录\n");
printf("\t 2.修改学生记录\n");
printf("\t 3.删除学生记录\n");
printf("\t 4.显示学生成绩和总分\n");
printf("\t 5.浏览全班成绩\n");
printf("\t 6.退出\n\n");
printf(" 输入你要操作的序号 : ");
scanf("%d",&a);
switch(a)
{
C程序设计报告
case 1:printf("\n");input();break;
case 2:printf("\n");change();break;
case 3:printf("\n");del();break;
case 4:printf("\n");allgrade();break;
case 5:printf("\n");paixu();break;
case 6:printf("\n");exit(0);break;
default:printf("\nThe choice is between 1 to 6.\n");
}
}while(a!=0);
}
void input()
{ int j;
char ch[20];
printf("\n输入学生信息:\n");
do
{ printf("\n学号: ");
scanf("%s",stu[k].num);
printf("\n姓名: ");
scanf("%s",stu[k].name);
printf("\n年龄: ");
scanf("%d",&stu[k].age);
for(j=0;j<3;j++)
{ printf("\n成绩%d: ",j+1);
scanf("%d",&stu[k].grade[j]); }
k++;
printf("\n如要继续,请输入学生信息(y/n): ");
scanf("%s",ch);
}while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);
outputgrade();
}
void outputgrade()
{ int i;
printf(" 学生信息是:\n");
for(i=0;i<k;i++)
{ printf("\t%s \t%s \t%d \t%d
\t%d",stu[i].num,stu[i].name,stu[i].age,stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]); printf("\n"); }
}
void change() \t%d
C程序设计报告
{
int i,j;
char a[20],ch[10];
printf("\n输入你要修改的学生学号:");
scanf("%s",a);
for(i=0;i<k;i++)
{
if(strcmp(stu[i].num,a)==0)
{ printf("\n你确定要修改学号吗?(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nnum:"); scanf("%s",stu[i].num);}
printf("\n你确定要修改学生姓名吗?(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nname"); scanf("%s",stu[i].name);}
printf("\n你确定要修改学生成绩吗?(y/n): ");
scanf("%s",ch);
printf("\n");
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
for(j=0;j<3;j++)
{ printf("grade%d:",j+1); scanf("%d",&stu[i].grade[j]); printf("\n"); } }
}
outputgrade();
}
void del()
{
int i,j;
char c[20];
printf("\n输入你要删除的学生学号 :\n");
printf("num:");
scanf("%s",&c);
for(i=0;i<3;i++)
if(strcmp(c,stu[i].num)==0) break;
for(j=i;j<=2;j++)
stu[j]=stu[j+1];
printf("\t\t\t你已经删除 %s的信息\n",c);
k--;
outputgrade();
}
C程序设计报告
void allgrade()
{ int i; float sum=0;
for(i=0;i<k;i++)
{ printf("\t%d \t%d \t%d\n",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
sum=sum+stu[i].grade[0]+stu[i].grade[1]+stu[i].grade[2] ; }
printf("总成绩是 %f",sum);
}
void paixu()
{ struct student temp;
int i,j;
for(i=0;i<k-1;i++)
{
for(j=i+1;j<k;j++)
{
if(stu[i].num<stu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
} }
outputgrade();
}
5.实习心得:
通过7次的C语言课程设计上机实习,我学到了很多东西。开始上机实习时,面对着繁琐的程序结构,我无从下手,一头雾水的我看到了《C语言课程设计与学习指导》中的第五章,“举一反三”部分。看完后,我“依葫芦画瓢”地在VISUAL C++上写了简单的程序模块。在同学的帮助下我做完了程序的主体部分。
C语言课程的学习已经过去了几个星期。刚开始学习这门课程的时候,我发现老师在课堂上讲授的东西很抽象,不能应用于实际的生活中,并且C语言中的结构,算法等很高深,不容易被我们消化吸收。在上机实习的过
C程序设计报告
程中,我发现C语言才是真正能够为现实生活中的问题提供一个简单快捷并且蕴涵着深深智慧的一个工具,作为当今时代的大学生,我们应该好好学习并掌握C语言。实际应用中我发现,很多的操作系统都能够C语言编出来,真正实现了办事效率的优化。在上机实习的过程中,我发现C语言中的算法和结构具有很深的智慧,一个看似复杂的问题,用很巧妙的C程序算法和结构能奇妙地解决。我们应该在以后的学习和生活中将C语言所特有的解决问题的思路和办法融入自己的智慧中。另外,C语言编出来的程序很清晰,整洁,将问题有条不紊地分离开来,在一个大框架的总体思路下,将要求化为几个并列的函数,一个函数又一个函数地将问题一一解决。 C语言这门课程所包含的东西还很多,很深。作为一名初次接触的学生,我在C语言课程的学习和这7次的实际上机操作中,对C语言有了进一步的理解。从老师开始从C语言的历史开始讲解,到现在,能在老师和同学的帮助下完成一个简单的程序设计,我获益匪浅。
遇到问题,分析问题,着手解决问题,并总结问题,C语言程序设计将解决问题并完善问题的总体过程告诉了我们,这对我们都是大有裨益的。