C语言程序小作业

课程设计要求:

1.本课程设计作为《程序设计基础(C语言)》的期末考核,占该课程总成绩的70%。
2.本课程设计的题目可以由老师指定或学生自选。
3.知识点要求包括:
(1)文件常用操作(打开,读/写数据,关闭等);
(2)选择结构;
(3)循环结构;
(4)自定义函数;
(5)数组的使用;
(6)指针的定义与引用;
(7)结构体类型的定义与使用
注意:需要在源代码相应的位置注释出以上知识点;
4.课程设计的主体包括题目名称、算法分析、流程设计、代码设计及运行结果。
题目名称:
算法分析:(提示:该部分内容填写课程设计所实现的系统具有哪些功能模块,每个模块能完成的功能及需要考虑的逻辑算法。)

流程设计:

备注:流程图可参考教材62-64页内容

代码设计:
int main()
{
//代码
}
void show() //功能模块名称
{
//代码
}
运行结果:
(说明:截取运行结果的状态图即可)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char filename[]="查询结果.txt";

FILE *fp;
struct ticket
{
char banci[20]; //班次
char shifadi[20]; //始发地
char zhongdian[20];//终点站
int date; //日期
int rest; //剩余票数
struct ticket *next;
}Node;
//1、创建链表
struct ticket *creat(int n)
{
struct ticket *head,*tail,*newnode;
int i;
head=(struct ticket *)malloc(sizeof(Node));
head->next=NULL;
tail=head;
printf("车辆班次、始发地、终点站、日期(月 日 如九月六日0906)、剩余票数\n");
for(i=0;i<n;i++)
{
newnode=(struct ticket *)malloc(sizeof(Node));
printf("请输入第%d次的数据:\n",i+1);
scanf("%s",newnode->banci);
scanf("%s",newnode->shifadi);
scanf("%s",newnode->zhongdian);
scanf("%d",&newnode->date);
scanf("%d",&newnode->rest);
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
return(head);
}

//4、浏览
void print(struct ticket *head)
{
struct ticket *p;
p=head->next;
//文件读写操作
fp=fopen(filename,"ab+");//打开文件
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
fprintf(fp,"班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);//向文件流里面写文件
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
p=p->next;
}
fclose(fp);//关闭文件
}
//2、增加班次
struct ticket *insert (struct ticket *head)
{
struct ticket *newnode,*p, *q;
printf("输入增加的车辆班次、始发地、终点站、日期(月 日 如九月六日09 06)、剩余票数\n");
scanf("%s",Node.banci);
scanf("%s",Node.shifadi);
scanf("%s",Node.zhongdian);
scanf("%d",&Node.date);
scanf("%d",&Node.rest);

newnode=(struct ticket *)malloc(sizeof(Node));
strcpy(newnode->banci,Node.banci);
newnode->date=Node.date;
newnode->rest=Node.rest;
strcpy(newnode->shifadi,Node.shifadi);
strcpy(newnode->zhongdian,Node.zhongdian);
p=head->next;
if (p==NULL)
{
head->next=newnode;
newnode->next=NULL;
}else{
while(p!=NULL)
{
q=p;
p=p->next;
}
q->next=newnode;
newnode->next=NULL;
}

return (head);
}
//6、订票
struct ticket *book(struct ticket *head,char b[],int n)
{
struct ticket *p;
p=head->next;
if(n==1)
{
//循环结构
while(p!=NULL&&strcmp(b,p->banci)!=0){
p=p->next;
}

if(p==NULL)
printf("你所预定的班次不存在");
if(strcmp(b,p->banci)==0)
{
if(p->rest>0)
{
p->rest=p->rest-1;
printf("订票成功");
}
else{
printf("票已售完");
}
}
}
if(n==2)
{
while(p!=NULL&&strcmp(b,p->banci)!=0){
p=p->next;
}

if(p==NULL){
printf("你所退定的班次不存在");
}

if(strcmp(b,p->banci)==0)
{
if(p->rest>0)
{
p->rest=p->rest+1;
printf("退票成功");
}
}
}
return (head);
}
//3、删除班次
struct ticket *del(struct ticket *head,char b[])
{
struct ticket *p,*q;
p=head->next;

while(p!=NULL&&strcmp(b,p->banci))
{
q=p;
p=p->next;
}

if (p==NULL)
{
printf("未找到你要删除的班次!~、\n");
}else{
if((p==head->next)&&(strcmp(b,p->banci)==0))
{
if (p->next==NULL)
{
free(p);
head->next=NULL;
}else{
head->next=p->next;
free(p);
}
printf("删除成功!~、\n");
}else if((p!=head->next)&&(strcmp(b,p->banci)==0))
{
if (p->next==NULL)
{
free(p);
q->next=NULL;
}else{
q->next=p->next;
free(p);
}
printf("删除成功!~、\n");
}
}

return (head);
}
//5、查询
struct ticket *chaxun1(struct ticket *head,char a[])
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p->banci,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
if(p==NULL){
printf("查询班次不存在\n");
}

return(head);
}

struct ticket *chaxun2(struct ticket *head,char a[])
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p->shifadi,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
return(head);
}

struct ticket *chaxun3(struct ticket *head,int m)
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(p->date==m)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
return(head);
}

void main()
{
printf("=============================车票查询订购系统===============================\n");
printf("1、读入车辆班次初始化信息\n");
printf("2、增加班次信息\n");
printf("3、删除班次信息\n");
printf("4、浏览所有班次\n");
printf("5、查询\n");
printf("6、订票退票\n");
printf("7、退出\n");

while(1)
{
int i,n,m,x;
char a[20],d[20],e[20];
struct ticket *head;
printf("请输入要使用的业务前相应的数字:\t");
scanf("%d",&i);
if(i==7)
break;
else
//选择结构
switch(i)
{
case 1: printf("输入录入的个数:\t");
scanf("%d",&n);;
head=creat(n);
break;
case 2:
insert(head);
break;
case 3:
printf("输入要删除的班次:\t");
scanf("%s",e);
del(head,e);
break;
case 4:
print(head);
break;
case 5:printf("1、按班次查询:\t");
printf("2、按始发站查询:\t");
printf("3、按日期查询:\t");
scanf("%d",&x);;
switch(x)
{
case 1:printf("输入要查询班次:\t");
scanf("%s",d);
chaxun1(head,d);break;
case 2:printf("输入要查询的始发站(请查询后输入有效的始发站):\t");
scanf("%s",d);
chaxun2(head,d);break;
case 3:printf("输入要查询的日期(格式0101):\t");
scanf("%d",&m);;
chaxun3(head,m);break;
}
break;
case 6:
printf("订票输入1,退票输入2:\t");
scanf("%d",&m);;
printf("输入你要订或退的班次:\t");
scanf("%s",a);
book(head,a,m);
break;
}
}
}
自己写的,这是一个订购、预订车票系统,它有着增、删、改、查的功能 ,楼主就按照老师的要求画个流程图就行了。知识点 ,我帮你标一下,绝对包括要求的所有知识点。不懂可以继续追问
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char filename[]="查询结果.txt";

FILE *fp;
struct ticket
{
char banci[20]; //班次
char shifadi[20]; //始发地
char zhongdian[20];//终点站
int date; //日期
int rest; //剩余票数
struct ticket *next;
}Node;
//1、创建链表
struct ticket *creat(int n)
{
struct ticket *head,*tail,*newnode;
int i;
head=(struct ticket *)malloc(sizeof(Node));
head->next=NULL;
tail=head;
printf("车辆班次、始发地、终点站、日期(月 日 如九月六日0906)、剩余票数\n");
for(i=0;i<n;i++)
{
newnode=(struct ticket *)malloc(sizeof(Node));
printf("请输入第%d次的数据:\n",i+1);
scanf("%s",newnode->banci);
scanf("%s",newnode->shifadi);
scanf("%s",newnode->zhongdian);
scanf("%d",&newnode->date);
scanf("%d",&newnode->rest);
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
return(head);
}

//4、浏览
void print(struct ticket *head)
{
struct ticket *p;
p=head->next;
//文件读写操作
fp=fopen(filename,"ab+");//打开文件
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
fprintf(fp,"班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);//向文件流里面写文件
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
p=p->next;
}
fclose(fp);//关闭文件
}
//2、增加班次
struct ticket *insert (struct ticket *head)
{
struct ticket *newnode,*p, *q;
printf("输入增加的车辆班次、始发地、终点站、日期(月 日 如九月六日09 06)、剩余票数\n");
scanf("%s",Node.banci);
scanf("%s",Node.shifadi);
scanf("%s",Node.zhongdian);
scanf("%d",&Node.date);
scanf("%d",&Node.rest);

newnode=(struct ticket *)malloc(sizeof(Node));
strcpy(newnode->banci,Node.banci);
newnode->date=Node.date;
newnode->rest=Node.rest;
strcpy(newnode->shifadi,Node.shifadi);
strcpy(newnode->zhongdian,Node.zhongdian);
p=head->next;
if (p==NULL)
{
head->next=newnode;
newnode->next=NULL;
}else{
while(p!=NULL)
{
q=p;
p=p->next;
}
q->next=newnode;
newnode->next=NULL;
}

return (head);
}
//6、订票
struct ticket *book(struct ticket *head,char b[],int n)
{
struct ticket *p;
p=head->next;
if(n==1)
{
//循环结构
while(p!=NULL&&strcmp(b,p->banci)!=0){
p=p->next;
}

if(p==NULL)
printf("你所预定的班次不存在");
if(strcmp(b,p->banci)==0)
{
if(p->rest>0)
{
p->rest=p->rest-1;
printf("订票成功");
}
else{
printf("票已售完");
}
}
}
if(n==2)
{
while(p!=NULL&&strcmp(b,p->banci)!=0){
p=p->next;
}

if(p==NULL){
printf("你所退定的班次不存在");
}

if(strcmp(b,p->banci)==0)
{
if(p->rest>0)
{
p->rest=p->rest+1;
printf("退票成功");
}
}
}
return (head);
}
//3、删除班次
struct ticket *del(struct ticket *head,char b[])
{
struct ticket *p,*q;
p=head->next;

while(p!=NULL&&strcmp(b,p->banci))
{
q=p;
p=p->next;
}

if (p==NULL)
{
printf("未找到你要删除的班次!~、\n");
}else{
if((p==head->next)&&(strcmp(b,p->banci)==0))
{
if (p->next==NULL)
{
free(p);
head->next=NULL;
}else{
head->next=p->next;
free(p);
}
printf("删除成功!~、\n");
}else if((p!=head->next)&&(strcmp(b,p->banci)==0))
{
if (p->next==NULL)
{
free(p);
q->next=NULL;
}else{
q->next=p->next;
free(p);
}
printf("删除成功!~、\n");
}
}

return (head);
}
//5、查询
struct ticket *chaxun1(struct ticket *head,char a[])
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p->banci,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
if(p==NULL){
printf("查询班次不存在\n");
}

return(head);
}

struct ticket *chaxun2(struct ticket *head,char a[])
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p->shifadi,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
return(head);
}

struct ticket *chaxun3(struct ticket *head,int m)
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(p->date==m)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
return(head);
}

void main()
{
printf("=============================车票查询订购系统===============================\n");
printf("1、读入车辆班次初始化信息\n");
printf("2、增加班次信息\n");
printf("3、删除班次信息\n");
printf("4、浏览所有班次\n");
printf("5、查询\n");
printf("6、订票退票\n");
printf("7、退出\n");

while(1)
{
int i,n,m,x;
char a[20],d[20],e[20];
struct ticket *head;
printf("请输入要使用的业务前相应的数字:\t");
scanf("%d",&i);
if(i==7)
break;
else
//选择结构
switch(i)
{
case 1: printf("输入录入的个数:\t");
scanf("%d",&n);;
head=creat(n);
break;
case 2:
insert(head);
break;
case 3:
printf("输入要删除的班次:\t");
scanf("%s",e);
del(head,e);
break;
case 4:
print(head);
break;
case 5:printf("1、按班次查询:\t");
printf("2、按始发站查询:\t");
printf("3、按日期查询:\t");
scanf("%d",&x);;
switch(x)
{
case 1:printf("输入要查询班次:\t");
scanf("%s",d);
chaxun1(head,d);break;
case 2:printf("输入要查询的始发站(请查询后输入有效的始发站):\t");
scanf("%s",d);
chaxun2(head,d);break;
case 3:printf("输入要查询的日期(格式0101):\t");
scanf("%d",&m);;
chaxun3(head,m);break;
}
break;
case 6:
printf("订票输入1,退票输入2:\t");
scanf("%d",&m);;
printf("输入你要订或退的班次:\t");
scanf("%s",a);
book(head,a,m);
break;
}
}
}
自己写的,这是一个订购、预订车票系统,它有着增、删、改、查的功能 ,楼主就按照老师的要求画个流程图就行了。知识点 ,我帮你标一下,绝对包括要求的所有知识点。不懂可以继续追问赞同
2| 评论 向TA求助 回答者: han1173049623 | 四级采纳率:37%

擅长领域: C/C++

参加的活动: 暂时没有参加的活动
相似回答