Java图形用户界面编程我给你写,已经测试,你看合不合你的意思 package dongzi.pattern; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.ev
大一C语言在线编程题
大一C语言编程题?
车票根据题意两两站点连线生成,金额和数量分别用随机数。
数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。
购买流程:检查输入数值有效性->检查车票库存->购买成功同步修改用户购买流水及车票库存。(这里题目需求不明确,没有指明用户购买方式),我的代码允许一个用户同时购买多种票,每种票可分批购买多张。购买流水记录自动增加和更新。
退票流程:检查输入和用户购买记录,同步更新用户及车票信息。
删除流程:选择删除没有被用户购买的票(函数检查所有用户,虽然本题只要一个用户,实际传参用户数组首地址)。
PS: 这个题目涉及到增删改,用链表来写更好,但考虑你学习范围,没有使用链表而是动态数组,动态数组删除,考虑内存占用,不仅要需循环移位还要释放多余地址。
另外整体程序,异常的处理我只是单纯返回0或者1或者-1区分基本的成功与失败。你如想对个别异常进行特殊处理,自行修改返回值,接收判断。
下面是代码:
#include
#include
#include
#include
#include
#include
#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种票)\n\n",cnt/2,cnt);
printf("按任意键继续。。。。\n"),getch();
system("cls");
showMenu(&uifo,tkts);
return 0;
}
int showMenu(UIFO *uifo,TKT *tkts)
{
int n=5;
printf("(1) Buy ticket\n");
printf("(2) Refund ticket\n");
printf("(3) Remove ticket\n");
printf("(4) Display all tickets\n");
printf("(0) Exit\n");
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 printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number); printf("按任意键继续。。。。\n"),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 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("当前用户购买记录:\n"); for(i=0;i { for(j=0;j if(tkts[j].tid==uifo->btids[i]) index=j; printf("--车票编号:%d,起末站:%s-%s,购买票数:%d\n",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 if(uifo->btids[i]==tid && uifo->btNum[i]>=n) { for(j=0;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("退票成功!\n"); else printf("无此购买记录或输入数量不符合\n"); printf("按任意键继续。。。。\n"),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 printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",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 if(strcmp(tkts[i].ssP->sName,spn)==0 && strcmp(tkts[i].tsP->sName,tpn)==0) { printf("车票%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].ssP->sName,tkts[i].tsP->sName,tkts[i].value,tkts[i].number); index=i; break; } if(index==-1) printf("购买失败!无此路程的车票\n"); else { while(n<=0) { printf("请输入要购买的数量(大于0):"),scanf("%d",&n); if(tkts[index].number printf("错误:车票数量不足或者输入数值超出范围!请重新输入!\n"),n=-1; } for(i=0;i { if(uifo->btids[i]==tkts[index].tid) { printf("该票已购买了%d张,现再次购买%d张,累计购买了%d张\n",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张\n",(uifo->btNum[uifo->cnt]=n)); tkts[index].number-=n; uifo->cnt++; printf("用户购买记录:\n"); for(i=0;i printf("--车票编号:%d,购买票数:%d\n",uifo->btids[i],uifo->btNum[i]); } printf("本次成功购买了%s-%s的票%d张!\n",tkts[index].ssP->sName,tkts[index].tsP->sName,n); } printf("按任意键继续。。。。\n"),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 printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",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 if(tid==tkts[i].tid) { index=i; flag=1; for(j=0;j { for(k=0;k if(uifos[j].btids[k]==tid) { flag=0; printf("该票已被用户购买,无法删除,需先完成退票!\n"); break; } if(!flag) break; } break; } if(!flag) printf(" 删除失败,输入数值超出范围或不可删除!\n"); 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 tkts[i]=tkts[i+1]; tkts[cnt].ssP=NULL; tkts[cnt].tsP=NULL; free(&tkts[cnt]); } printf(" 删除成功!\n"); } printf("按任意键继续。。。。\n"),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("生成站点:\n"); for(i=0;i { sprintf(stns[i].sid,"车站%03d",id); sprintf(stns[i].sName,"SN%03d",id); printf("----站点名:%s。站点ID:%s\n",stns[i].sid,stns[i].sName); } printf("计算所有站点连线,生成车票(票是往返,所以一次生成往返两组票):\n"); for(i=0;i for(j=i+1;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(随机)\n",stns[i].sName,stns[j].sName,n,v); cnt+=2; } return cnt-2; } //答题不易,如采纳的,请不要无故删除问题。 源代码中为了测试方便,直接将数据赋给了数组。没有输入数据的过程,自行补全。不知道怎么回事,现在回答中没有了代码插入展示版面,为了好看只有上图了。 相关文章 求西门子宏程序,编程实例众所周知,西门子系统的一大亮点就是包含丰富的手动测量功能及各种各样的测量循环。但本期给大家介绍一下如何简单的编写一个西门子测量宏程序,用于测试 编程教育和机器人教育有什么不一样?机器人编程的语言与计算机编程的语言略有不同。像青少年儿童机器人编程这块,乐高EV3的编程是模块化编程,非常适合零基础的孩子入门。VEX机器 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。是软件程序的问题,只要将连接ACCESS数据库的Miscrosoft.Jet.OLEDB.4.0改成Microsoft.Jet.OLEDB.4.0就OK了,主要就 怎么样防止别人访问我的电脑啊最简单的方法就是到windows自带的防火墙那里去设置。 点控制面板的windows防火墙----更改设置-----常规(点启用推荐与阻止所有传入连接)。 这样 谁有 VB编程与应用(电大)29讲视频教程下载,有其它的视频下载也可以VB编程与应用(电大)29讲为什么我下载的宁波电大的vb教程的视频有些打不开啊这个问题我也遇到过,其实只要 java File f=new file(path,File.text);是什么意思由API查得 File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 编程猫社区入口该怎么进入点击编程猫官网进入社区即可。 用UG怎么编程加工这种筋,用哪个命令呢?先把该编程软件的常用命令,函数记好 要熟练掌握、熟练运用, 补充:UG有专门的模块,可以仿真刀路,然后到处程序, 补充:用UG这个编程目的就是自动大一C语言编程题!!
好好考试,老弟。 #include 大一C语言编程题(要详细),谢谢!
建立一个数组aa[256],全初始化为0, 2)从头读字符串,每一个是存c中,在相应的aa[c]加1 3)如果aa中的奇数,大于1个,说明不可能是回文数 4)现在就是找最小的交换次数了,也就是把aa中的字每一个拿一半加上哪个奇数减1的一半,来作排列组合,这样最后要的字符串就定下来了,每个字符在这字符串中的号是定下来的,把这个号,和输入的字符串关联起来,来进行冒泡排序 ,如果交换就增加一次交换次数,最后比较所有的排列组合哪个次数最小,就完成大一c语言编程题
#include
intmain()
{
intn,a,b,c;
scanf("%d",&n);
if(n<100||n>999)
printf("Inputerror!");
else
{
a=n/100;
b=n/10%10;
c=n%10;
printf("%d",a*a*a+b*b*b+c*c*c);
}
return0;
}大一C语言编程题!
打开电脑浏览器,搜索编程猫,打开编程猫官网.官方网站上有如图所示两种选项,可以选择创作或者三维代码岛.点击代码岛2.0