❶ c++課程設計 電影院自動售票機
int zong(0);//定義一個全局變數,記錄總出票
創建一個結構
struct wei
{
int x;//排號
int y[10];//對應排的座號
}
創建一個類.可根據需要繼承或擴展
class sale
{
pravite:
int a;//場次
int b;//本廠總出票
wei zuohao[10];//存放座位的結構,這個也可以用數組表示,但這樣比較直觀
char riqi;//用於存放日期,也可以用其他形式表示,
void sale(int changci)//構造函數
{
this->chang(changci);
}
void sale(void);重載構造函數
public:
int maipiao(void){根據你要實現的情況填寫,b+=1,zong+=1}//比如有人買票,可以將現有空座按10*10對應的0和1分別表示空或有人,供顧客挑選,若成功返回1,並使得總票數和單場票數各加1.失敗返回0
viod chang(int c)//用於初始化場次
{
b=0;//初始化本廠次的總票數
a=changci;
riqi=系統日期(取值)
for (int i=0;i<=9;i++)//初始化座位
{
zuohao[i].x=i;
for (int j=0;j<=9;j++)
{
zuohao[i].y[j]=0;//初始化全部為0代表空,賣出一個相應變為1
}
}
}
viod tongjidanchang(void){cout<<b<<endl;}//統計單場列印出單場總出票的情況
.......後面省略,自己根據需要寫
}
int main{}主函數//不知道你是需要有沒有界面的,又是都是命令行的可願意這樣
{
char mingling;//命令符
do
cin>>mingling;
switch mingling
{
case c//表示創建一個新場次
{
int mingling;
cin>>mingling;
sale chang1(mingling);
do
char mingling1;//命令符
switch mingling1
{
case m;//買票
{
mingling1.maipiao()//執行相應的買票函數
}
case q1;//退出
{
退出循環
}
}
loop
}
case q;輸入q,退出循環
{
break或exit(1);
}
}
case d;
{
列印單場
}
case z;
{
列印總共售票
}
loop
}
以上是一個思路,具體還要看你想要怎麼實現,其中也可以在main後面直接建立一個sale的數組
sale changci[cccc];cccc是你准備一天計劃放映的場次
cin>>cccc
for (int j=0;j<=cccc;J++)
{
changci[j].chang(j);調用相應的初始化函數
}
這樣以後打單場的時候就可以changci[j].tongjidanchang()
❷ 大學c語言(c++)課程設計電影院售票管理系統
#include<iostream>
#include<iomanip>
#defineLEN20
#defineROW20
usingnamespacestd;
voidinitseat(chars[LEN][ROW])
{
inti,j;
for(i=0;i<LEN;i++)
{
for(j=0;j<ROW;j++)
{
s[i][j]='';
}
}
}
voidprintmenu()
{
cout<<" 1.查詢座位 "<<"2.預定座位"<<endl;
cout<<" 3.列印電影票 "<<"4.顯示所有位置"<<endl;
cout<<" 0.退出"<<endl;
}
voidprintseat(chars[LEN][ROW])
{
inti,j;
cout<<"";
for(i=0;i<ROW;i++)
cout<<setw(3)<<i+1;
cout<<endl;
for(i=0;i<LEN;i++)
{
cout<<setw(3)<<i+1<<".";
for(j=0;j<ROW;j++)
cout<<setw(3)<<s[i][j];
cout<<endl;
}
}
boolsearchfull(chars[LEN][ROW])
{
intl,r;
cout<<"您要查找的行數為:";
cin>>l;
cout<<"您要查找的列數為:";
cin>>r;
if(s[l-1][r-1]!='')
{
cout<<"您查找的座位已有人!!!"<<endl;
returnfalse;
}
else
{
cout<<"您查找的座位沒有人!!!"<<endl;
returntrue;
}
}
boolprintticket(chars[LEN][ROW],intl,intr)
{
cout<<"電影名稱:"<<"星際穿越"<<endl;
cout<<"座位:"<<l<<"排"<<r<<"列"<<endl;
cout<<"放映時間:"<<"2014年12月20日14:00"<<endl;
returntrue;
}
boolreservation(chars[LEN][ROW])
{
intl,r;
cout<<"您要預定的行數為:";
cin>>l;
cout<<"您要預定的列數為:";
cin>>r;
if(!(l<=LEN&&l>=0&&r<=ROW&&r>=0))
{
cout<<"您的輸入不合法!!!"<<endl<<"預定失敗!!!"<<endl;
returnfalse;
}
boolflag;
if(s[l-1][r-1]=='#')
flag=false;
else
flag=true;
if(flag==false)
{
cout<<"此座位已有人!!!"<<endl;
returnfalse;
}
s[l-1][r-1]='#';
printticket(s,l,r);
returntrue;
}
intmain()
{
charseat[LEN][ROW];
intflag,l,r;
initseat(seat);
printseat(seat);
printmenu();
while(cin>>flag,flag!=0)
{
switch(flag)
{
case1:searchfull(seat);break;
case2:reservation(seat);break;
case3:cout<<"請輸入您要列印的行數:";cin>>l;
cout<<"請輸入您要列印的行數:";cin>>r;
if(!(l<=LEN&&l>=0&&r<=ROW&&r>=0))
{
cout<<"您的輸入不合法!!!"<<endl<<"預定失敗!!!"<<endl;
break;
}
printticket(seat,l,r);
break;
case4:printseat(seat);
default:break;
}
printmenu();
}
return0;
}
❸ 大一C語言編程題
車票根據題意兩兩站點連線生成,金額和數量分別用隨機數。
數據存儲:站點,車票,用戶分別為3個結構體,用於對應資料庫。
購買流程:檢查輸入數值有效性->檢查車票庫存->購買成功同步修改用戶購買流水及車票庫存。(這里題目需求不明確,沒有指明用戶購買方式),我的代碼允許一個用戶同時購買多種票,每種票可分批購買多張。購買流水記錄自動增加和更新。
退票流程:檢查輸入和用戶購買記錄,同步更新用戶及車票信息。
刪除流程:選擇刪除沒有被用戶購買的票(函數檢查所有用戶,雖然本題只要一個用戶,實際傳參用戶數組首地址)。
PS: 這個題目涉及到增刪改,用鏈表來寫更好,但考慮你學習范圍,沒有使用鏈表而是動態數組,動態數組刪除,考慮內存佔用,不僅要需循環移位還要釋放多餘地址。
另外整體程序,異常的處理我只是單純返回0或者1或者-1區分基本的成功與失敗。你如想對個別異常進行特殊處理,自行修改返回值,接收判斷。
下面是代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#define MS 5//最大站點數
typedef struct station
{
char sid[10];
char sName[20];
}STN;
typedef struct ticket
{
int tid;//票編號
STN *ssP;//起始站
STN *tsP;//終點站
int value;//票價
int number;//數量
}TKT;
typedef struct userInfo//用戶
{
char uid[20];//身份證號
int cnt;//購買的票種類數量
int *btids;//購買的所有票id數組
int *btNum;//購買的所有票數量數組
}UIFO;
int init(STN stns[MS],TKT **tkts);//初始化車站、票數據
int disAllTickets(TKT *tkts);
int buyTicket(UIFO *uifo,TKT *tkts);//異常返回0
int reTicket(UIFO *uifo,TKT *tkts);//異常返回0
int showMenu(UIFO *uifo,TKT *tkts);
int delIntByIndex(int *nums,int len,int index);//通過下標index刪除動態整型數組nums對應元素,並釋放多餘地址,返回刪除後的數組長度,異常返回-1
int delTkts(UIFO *uifos,int len,TKT *tkts);//刪除指定票(檢查用戶組,只要有一個用戶購買,無法刪除)
int cnt;//票種類數量
int main()
{
STN stns[MS];
TKT *tkts=NULL;
UIFO uifo={"321002199902050614",0,NULL,NULL};
srand(time(NULL));
cnt=init(stns,&tkts);
printf("共生成%d組票(每組往返兩種票,共%d種票) ",cnt/2,cnt);
printf("按任意鍵繼續。。。。 "),getch();
system("cls");
showMenu(&uifo,tkts);
return 0;
}
int showMenu(UIFO *uifo,TKT *tkts)
{
int n=5;
printf("(1) Buy ticket ");
printf("(2) Refund ticket ");
printf("(3) Remove ticket ");
printf("(4) Display all tickets ");
printf("(0) Exit ");
while(n<0 || n>4)
scanf("%d",&n);
switch(n)
{
case 0: return 0;
case 1: if(!buyTicket(uifo,tkts)) return 0;break;
case 2: if(!reTicket(uifo,tkts)) return 0;break;
case 3: if(!delTkts(uifo,1,tkts)) return 0;break;
//這里刪除功能,用戶多名,要傳數組首地址,由於演示只有一個用戶(len=對應用戶數),所以只傳該用戶地址(len=1)
case 4: disAllTickets(tkts);break;
}
showMenu(uifo,tkts);
return 1;
}
int disAllTickets(TKT *tkts)
{
int i;
for(i=0;i<cnt;i++)
printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);
printf("按任意鍵繼續。。。。 "),getch();
system("cls");
return 1;
}
int delIntByIndex(int *nums,int len,int index)
{
int i,*temp=NULL;
if(index>len-1) return -1;
for(i=index;i<len-1;i++)
nums[i]=nums[i+1];
len--;
if(len)
{
temp=(int *)realloc(nums,sizeof(int)*len);
if(!temp) return -1;
nums=temp;
}
else
free(nums);
return len;
}
int reTicket(UIFO *uifo,TKT *tkts)
{
int i,j,tid,n,index,len,flag=0;
printf("當前用戶購買記錄: ");
for(i=0;i<uifo->cnt;i++)
{
for(j=0;j<cnt;j++)
if(tkts[j].tid==uifo->btids[i]) index=j;
printf("--車票編號:%d,起末站:%s-%s,購買票數:%d ",uifo->btids[i],tkts[index].ssP->sName,tkts[index].tsP->sName,uifo->btNum[i]);
}
printf("請輸入要退票的車票id及票數:"),scanf("%d%d",&tid,&n);
for(i=0;i<uifo->cnt;i++)
if(uifo->btids[i]==tid && uifo->btNum[i]>=n)
{
for(j=0;j<cnt;j++)
if(tkts[j].tid==uifo->btids[i]) tkts[j].number+=n;//同步修改對應車票剩餘票數
uifo->btNum[i]-=n;//用戶購買記錄修改
if(uifo->btNum[i]==0)//某種車票全部退完,刪除該條記錄
{
len=delIntByIndex(uifo->btNum,uifo->cnt,i);
if(len==-1) return 0;
len=delIntByIndex(uifo->btids,uifo->cnt,i);
if(len==-1) return 0;
uifo->cnt=len;
}
flag=1;
break;
}
if(flag)
printf("退票成功! ");
else
printf("無此購買記錄或輸入數量不符合 ");
printf("按任意鍵繼續。。。。 "),getch();
system("cls");
return 1;
}
int buyTicket(UIFO *uifo,TKT *tkts)
{
char spn[20],tpn[20];
int i,n=-1,index=-1,*temp=NULL;
for(i=0;i<cnt;i++)
printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);
printf("請輸入始發站站名和終點站站名:"),scanf("%s%s",spn,tpn);
for(i=0;i<cnt;i++)
if(strcmp(tkts[i].ssP->sName,spn)==0 && strcmp(tkts[i].tsP->sName,tpn)==0)
{
printf("車票%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);
index=i;
break;
}
if(index==-1)
printf("購買失敗!無此路程的車票 ");
else
{
while(n<=0)
{
printf("請輸入要購買的數量(大於0):"),scanf("%d",&n);
if(tkts[index].number<n)
printf("錯誤:車票數量不足或者輸入數值超出范圍!請重新輸入! "),n=-1;
}
for(i=0;i<uifo->cnt;i++)//檢查用戶購買記錄,重復票累加購買數量,不同票新增記錄
{
if(uifo->btids[i]==tkts[index].tid)
{
printf("該票已購買了%d張,現再次購買%d張,累計購買了%d張 ",uifo->btNum[i],n,uifo->btNum[i]+n);
uifo->btNum[i]+=n;
tkts[index].number-=n;
break;
}
}
if(i==uifo->cnt)//未檢查到重復記錄,新增
{
if(!uifo->btids)
{
uifo->btids=(int *)malloc(sizeof(int));
if(!uifo->btids) return 0;
uifo->btNum=(int *)malloc(sizeof(int));
if(!uifo->btNum) return 0;
}
else
{
temp=(int *)realloc(uifo->btids,sizeof(int)*(uifo->cnt+1));
if(!temp) return 0;
uifo->btids=temp;
temp=(int *)realloc(uifo->btNum,sizeof(int)*(uifo->cnt+1));
if(!temp) return 0;
uifo->btNum=temp;
}
uifo->btids[uifo->cnt]=tkts[index].tid;
printf("該票購買了%d張 ",(uifo->btNum[uifo->cnt]=n));
tkts[index].number-=n;
uifo->cnt++;
printf("用戶購買記錄: ");
for(i=0;i<uifo->cnt;i++)
printf("--車票編號:%d,購買票數:%d ",uifo->btids[i],uifo->btNum[i]);
}
printf("本次成功購買了%s-%s的票%d張! ",tkts[index].ssP->sName,tkts[index].tsP->sName,n);
}
printf("按任意鍵繼續。。。。 "),getch();
system("cls");
return 1;
}
int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有購買的用戶數量
{
int i,j,k,tid,flag=0,index;
for(i=0;i<cnt;i++)
printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number);
printf("請輸入要刪除的車票編號:"),scanf("%d",&tid);
for(i=0;i<cnt;i++)
if(tid==tkts[i].tid)
{
index=i;
flag=1;
for(j=0;j<len;j++)//檢查所有用戶購買記錄
{
for(k=0;k<uifos[j].cnt;k++)
if(uifos[j].btids[k]==tid)
{
flag=0;
printf("該票已被用戶購買,無法刪除,需先完成退票! ");
break;
}
if(!flag)
break;
}
break;
}
if(!flag) printf(" 刪除失敗,輸入數值超出范圍或不可刪除! ");
else
{
cnt--;
if(cnt==0)
{
free(tkts[index].ssP);
free(tkts[index].tsP);
free(&tkts[index]);
}
else
{
free(tkts[index].ssP);
free(tkts[index].tsP);
for(i=index;i<cnt;i++)
tkts[i]=tkts[i+1];
tkts[cnt].ssP=NULL;
tkts[cnt].tsP=NULL;
free(&tkts[cnt]);
}
printf(" 刪除成功! ");
}
printf("按任意鍵繼續。。。。 "),getch();
system("cls");
return 1;
}
int init(STN stns[MS],TKT **tkts)
{
TKT *tTemp=NULL;
int i,j,n,v,cnt=2;
static int id=1;
printf("生成站點: ");
for(i=0;i<MS;i++,id++)
{
sprintf(stns[i].sid,"車站%03d",id);
sprintf(stns[i].sName,"SN%03d",id);
printf("----站點名:%s。站點ID:%s ",stns[i].sid,stns[i].sName);
}
printf("計算所有站點連線,生成車票(票是往返,所以一次生成往返兩組票): ");
for(i=0;i<MS;i++)
for(j=i+1;j<MS;j++)
{
if(!(*tkts))
{
*tkts=(TKT *)malloc(sizeof(TKT)*2);
if(!(*tkts)) return -1;
}
else
{
tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt);
if(!tTemp) return -1;
*tkts=tTemp;
}
n=rand()%4+2;//每種票隨機2~5張(保證總數大於20)
v=rand()%201+50;//隨機生成票價50~250
(*tkts)[cnt-1].tid=cnt;
(*tkts)[cnt-1].ssP=&stns[i];
(*tkts)[cnt-1].tsP=&stns[j];
(*tkts)[cnt-1].value=v;
(*tkts)[cnt-1].number=n;
(*tkts)[cnt-2].tid=cnt-1;
(*tkts)[cnt-2].ssP=&stns[j];
(*tkts)[cnt-2].tsP=&stns[i];
(*tkts)[cnt-2].value=v;
(*tkts)[cnt-2].number=n;
printf("----%s和%s的之間往返票各生成%d張,票價為%d(隨機) ",stns[i].sName,stns[j].sName,n,v);
cnt+=2;
}
return cnt-2;
}
//答題不易,如採納的,請不要無故刪除問題。
❹ C語言編寫程序:用戶界面中的菜單至少應包括「售票」、「退票」、「統計滿座率」、「退出」4項。
這樣???
❺ 求c語言,電影院售票管理系統的設計與實現的代碼
#include<stdio.h>
#include<stdlib.h>
structcell
{
char*name;
inttime;
intseat;
intsaled;
}a,b,c,d;
intsel=0;
voidtitle();
voidsaleproc();
intsaleThread(structcell*ce,intdd);
voidtiupiaoproc();
inttiupiaoThread(structcell*ce);
voidcount();
intinit(structcell*ce,char*name,inttime,intseat)
{
ce->name=name;
ce->time=time;
ce->seat=seat;
ce->saled=0;
return1;
}
intsaleThread(structcell*ce,intdd)
{
if((ce->seat-ce->saled)>=dd)
{
ce->saled+=dd;
printf("售票成功!按ESC鍵返回主菜單 ");
fflush(stdin);
intcc=_getche();
return1;
}
else
{
printf("售票失敗---余票不足!按ESC鍵返回主菜單 ");
fflush(stdin);
intcc=_getche();
return0;
}
}
voidsaleproc()
{
intf=1;
while(f)
{
system("cls");
printf("*********************************** ");
printf("** ");
printf("*廳影片時間余票* ");
printf("** ");
printf("*A%s%d:%d%3d* ",a.name,a.time/60,a.time%60,a.seat-a.saled);
printf("** ");
printf("*B%s%d:%d%3d* ",b.name,b.time/60,b.time%60,b.seat-b.saled);
printf("** ");
printf("*C%s%d:%d%3d* ",c.name,c.time/60,c.time%60,c.seat-c.saled);
printf("** ");
printf("*D%s%d:%d%3d* ",d.name,d.time/60,d.time%60,d.seat-d.saled);
printf("** ");
printf("*********************************** ");
printf("請選擇放映廳(a,b,c,d)和要購的票數(按ESC鍵返回主菜單)(格式:a5): ");
fflush(stdin);
charcc;
intdd;
dd=_getche();
if(dd==27)
{
f=0;
break;
}
else
{
cc=(char)dd;
}
scanf("%d",&dd);
switch(cc)
{
case'a':
saleThread(&a,dd);
f=0;
break;
case'b':
saleThread(&b,dd);
f=0;
break;
case'c':
saleThread(&c,dd);
f=0;
break;
case'd':
saleThread(&d,dd);
f=0;
break;
default:
break;
}
}
title();
}
inttiupiaoThread(structcell*ce)
{
if(ce->saled==0)
{
printf("撞尼瑪鬼了老子一張票都沒賣,哪來的退票??? ");
fflush(stdin);
intcc=_getche();
return0;
}
ce->saled--;
printf("退票成功!按任意鍵返回主菜單 ");
fflush(stdin);
intcc=_getche();
return1;
}
voidtiupiaoproc()
{
intf=1;
while(f)
{
system("cls");
printf("*********************************** ");
printf("** ");
printf("*退票* ");
printf("** ");
printf("*A%-20s* ",a.name);
printf("** ");
printf("*B%-20s* ",b.name);
printf("** ");
printf("*C%-20s* ",c.name);
printf("** ");
printf("*D%-20s* ",d.name);
printf("** ");
printf("*********************************** ");
printf("請輸入要退的廳(a,b,c,d): ");
charcc;
fflush(stdin);
scanf("%c",&cc);
if(cc=='')
{
f=0;
break;
}
switch(cc)
{
case'a':
tiupiaoThread(&a);
f=0;
break;
case'b':
tiupiaoThread(&b);
f=0;
break;
case'c':
tiupiaoThread(&c);
f=0;
break;
case'd':
tiupiaoThread(&d);
f=0;
break;
default:
break;
}
}
title();
}
voidcountproc()
{
intf=1;
while(f)
{
system("cls");
printf("*********************************** ");
printf("** ");
printf("*統計* ");
printf("** ");
printf("*A廳:余票%3d上座率%5.2f%%* ",a.seat-a.saled,(((float)a.saled/(float)a.seat)*100));
printf("** ");
printf("*B廳:余票%3d上座率%5.2f%%* ",b.seat-b.saled,(((float)b.saled/(float)b.seat)*100));
printf("** ");
printf("*C廳:余票%3d上座率%5.2f%%* ",c.seat-c.saled,(((float)c.saled/(float)c.seat)*100));
printf("** ");
printf("*D廳:余票%3d上座率%5.2f%%* ",d.seat-d.saled,(((float)d.saled/(float)d.seat)*100));
printf("** ");
printf("*********************************** ");
printf("按ESC鍵返回主菜單! ");
fflush(stdin);
intcc=_getche();
if(cc==27)
{
f=0;
break;
}
}
title();
}
voidtitle()
{
intf=1;
while(f)
{
system("cls");
printf("*********************************** ");
printf("** ");
printf("*歡迎光臨牛B電影院* ");
printf("** ");
printf("*1.售票* ");
printf("** ");
printf("*2.退票* ");
printf("** ");
printf("*3.統計* ");
printf("** ");
printf("*4.退出* ");
printf("** ");
printf("*********************************** ");
printf("請選擇:(1,2,3,4) ");
fflush(stdin);
scanf("%d",&sel);
getchar();
switch(sel)
{
case1:
saleproc();
f=0;
break;
case2:
tiupiaoproc();
f=0;
break;
case3:
countproc();
f=0;
break;
case4:
system("exit");
f=0;
break;
default:
break;
}
}
}
intmain(intargc,char*argv[])
{
init(&a,"鋼鐵俠3",18*60+30,150);
init(&b,"致青春",19*60+30,150);
init(&c,"姜戈",20*60+30,150);
init(&d,"生化危機4",20*60+20,100);
title();
return0;
}
❻ 有3個候選人,每個選民只能投一票,用C語言編一個統計票數的程序,最後輸出的票結果,下面我寫的,哪錯了
沒有問題啊,就是你的有一個位置打錯了。