当前位置:首页 » 编程语言 » 大一c语言课程设计题目
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

大一c语言课程设计题目

发布时间: 2022-12-16 08:21:20

‘壹’ c语言课程设计~~~ 要求编写一段程序,题目是《校际运动会管理系统》

我这是源代码已经调试过了,在VC++上运行成功了。
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
struct score
{
int mingci;
char xuehao[8];
char mingzi[20];
float score[6];
}data,info[1000];
int i,j,k=0;
char temp[20],ch;
FILE *fp,*fp1;

void shuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPlease shuru xuehao:");
gets(data.xuehao);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please shuru wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please shur huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
fwrite(&data,sizeof(data),1,fp);
printf("another?y/n");
ch=getch();
if(ch=='n'||ch=='N')
break;
} fclose(fp);
}
void xianshi()
{
float s;int n;
if((fp=fopen("s_score.txt","rb+"))==NULL)
{
printf("Cannot reading this file.\n");
exit(0);
}
for(i=0;i<=1000;i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!=1)
break;
}
printf("\nxuehao mingzi yuwen shuxue yingyu wuli huauxue zhongfen\n");
for(j=0,k=1;j<i;j++,k++)
{
info[j].mingci=k;
printf("%6s %8s %3.1f %3.1f %3.1f %3.1f %3.1f %3.1f\n",info[j].xuehao,info[j].mingzi,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3],info[j].score[4],
info[j].score[5]);
}
getch();
fclose(fp);
}

void xiugai()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("Cannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xiugai xuehao:");
scanf("%d",&i); getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("xuehao:%s\nmingzi:%s\n",data.xuehao,data.mingzi);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please input wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please input huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];

} fwrite(&data,sizeof(data),1,fp1);
}
fseek(fp,0L,0);
fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1)
{
fwrite(&data,sizeof(data),1,fp);
}

fclose(fp);
fclose(fp1);
}
void chazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xuehao chakan:");
scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao);
if(i==j)
{
printf("xuehao:%s mingzi:%s\nyuwen:%f\n shuxue:%f\n yingyu:%f\n wuli:%f\n huaxue:%f\n ",data.xuehao,data.mingzi,data.score[0],data.score[1],data.score[2],data.score[3],data.score[4],data.score[5]);
}getch();
}
}
void shanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopen score.txt was failed!");
getch();
exit(0);
}
printf("\nPlease input ID which you want to del:");
scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{

printf("Anykey will delet it.\n");
getch();
continue;
}
fwrite(&data,sizeof(data),1,fp1);
}
fclose(fp);
fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Data delet was succesful!\n");
printf("Anykey will return to main.");
getch();
}
main()
{
while(1)
{
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
window(1,1,99,99); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr();
printf("*************welcome to use student manage******************\n");
printf("*************************menu********************************\n");
printf("* ========================================================= * \n");
printf("* 1>shuru 2>xiugai * \n");
printf("* 3>shanchu 4>chazhao * \n");
printf("* 5>xianshi 6>exit * \n");
printf("* * \n");
printf("* --------------------------------------------------------- * \n");
printf(" Please input which you want(1-6):");
ch=getch();
switch(ch)
{
case '1':shuru();break;
case '2':xiugai(); break;
case '3':shanchu(); break;
case '4':chazhao(); break;
case '5':xianshi(); break;
case '6':exit(0);
default: continue;
}
}

‘贰’ c语言程序设计编程题目:请 :编写完成对学生相关信息的要求:1.定义一个结构体类型student,其中包括三个成

#include <stdio.h>

#include <stdlib.h>

#define STU_NUM 10 /*宏定义学生的数量*/

struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/

{

char stu_id[20]; /*学生学号;*/

float score[3]; /*三门课成绩;*/

float total; /*总成绩;*/

float aver; /*平均成绩;*/

};

/*排序用一个函数来实现*/

void SortScore(student *stu,int n)

{

student stud;

for(int i = 0; i < n-1; i++)

for(int j = i+1 ; j < n; j++)

{

if(stu[i].total < stu[j].total)

{

stud = stu[i];

stu[i] = stu[j];

stu[j] = stud;

}

}

}

int main( )

{

student stu[STU_NUM]; /*创建结构体数组中有10个元素,分别用来保存这10个人的相关信息。*/

/*输入这十个学生的相关信息*/

for(int i = 0; i<STU_NUM; i++)

{

printf("请输入第%d个学生的学号:",i+1);

scanf("%s",&stu[i].stu_id);

printf("输入第%d个学生的数学成绩:",i+1);

scanf("%f",&stu[i].score[0]);

printf("输入第%d个学生的英语成绩:",i+1);

scanf("%f",&stu[i].score[1]);

printf("输入第%d个学生的计算机成绩:",i+1);

scanf("%f",&stu[i].score[2]);

stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2];

stu[i].aver = stu[i].total/3;

}

printf("\n");

SortScore(stu,STU_NUM);/*调用排序函数*/

/*输出排序后的各学生的成绩*/

for(i = 0 ; i < STU_NUM; i++)

{

printf("序号: %d\t",i);

printf("学号:%s\t",stu[i].stu_id);

printf("数学:%f\t",stu[i].score[0]);

printf("英语:%f\t",stu[i].score[1]);

printf("计算机:%f\t",stu[i].score[2]);

printf("平均成绩:%f\t",stu[i].aver);

printf("总分:%f\t",stu[i].total);

printf("\n\n");

}

return 0;

}

注:(源程序中主要标识符含义说明)

#define STU_NUM 10 /*宏定义学生的数量*/

struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/

{

char stu_id[20]; /*学生学号;*/

float score[3]; /*三门课成绩;*/

float total; /*总成绩;*/

float aver; /*平均成绩;*/

}

‘叁’ 我是大一的学生 老师让我们做一个c语言课程设计 现在给出三道 希望大家 帮帮忙 编写一个工资管理的程序。

#include <time.h>
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 80
void input();
void sort();
void display();
void insert();
void del();
void average();
void find();
void save();
void read();
void del_file();
void average();
void modify();
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
main()/*主函数*/
{
int as;
start: printf("\n\t\t\t欢迎使用学生成绩管理系统\n");
/*一下为功能选择模块*/
do
{
printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.成绩排序信息\n\t\t\t\t4.添加学员信息\n\t\t\t\t5.删除学员信息\n\t\t\t\t6.修改学员信息\n\t\t\t\t7.查询学员信息\n\t\t\t\t8.从文件读入学员信息\n\t\t\t\t9.删除文件中学员信息\n\t\t\t\t10.保存学员信息\n\t\t\t\t11.退出\n");
printf("\t\t\t\t选择功能选项:");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
case 1:system("cls");input();break;
case 2:system("cls");display();break;
case 3:system("cls");sort();break;
case 4:system("cls");insert();break;
case 5:system("cls");del();break;
case 6:system("cls");modify();break;
case 7:system("cls");find();break;
case 8:system("cls");read();break;
case 9:system("cls");del_file();break;
case 10:system("cls");save();break;
case 11:system("exit");exit(0);
default:system("cls");goto start;
}
}while(1);
/*至此功能选择结束*/
}
void input()/*原始数据录入模块*/
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1);
printf("\n输入学生编号:");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n输入学员姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学员成绩1:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n输入学员成绩2:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学员成绩3:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
i++;
now_no=i;
printf("是否继续输入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
}
void sort()/*排序数据函数*/
{
struct student temp;
int i,j;
average();
for(i=1;i<now_no;i++)
{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
void display()/*显示数据函数*/
{
int i;
char as;
average();
do
{
printf("\t\t\t班级学员信息列表\n");
printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
for(i=0;i<now_no&&stu[i].name[0];i++)printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
printf("\t\t按任意键返回主菜单.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void insert()/*插入数据函数*/
{
char ch;
do
{
printf("\n\t\t输入新插入学员队信息\n");
printf("\n输入学生编号:");
scanf("%d",&stu[now_no].no);
fflush(stdin);
printf("\n输入学员姓名:");
fflush(stdin);
gets(stu[now_no].name);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[now_no].sex);
printf("\n输入学员成绩1:");
fflush(stdin);
scanf("%f",&stu[now_no].score1);
printf("\n输入学员成绩2:");
fflush(stdin);
scanf("%f",&stu[now_no].score2);
printf("\n输入学员成绩3:");
fflush(stdin);
scanf("%f",&stu[now_no].score3);
printf("\n\n");
now_no=now_no+1;
sort();
printf("是否继续输入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
}
void del()/*删除数据函数*/
{
int inum,i,j;
printf("输入要删除学员的编号:");
fflush(stdin);
scanf("%d",&inum);
for(i=0;i<now_no;i++)
{
if(stu[i].no==inum)
{
if(i==now_no)now_no-=1;
else
{
stu[i]=stu[now_no-1];
now_no-=1;
}
sort();
break;
}
}
system("cls");
}
void save()/*保存数据函数*/
{
FILE *fp;
int i;
char filepath[20];
printf("输入要保存的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失败!");
exit(0);
}
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp,"\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
}
fclose(fp);
printf("学生信息已保存在%s中!\n",filepath);
system("pause");
system("cls");
}
void find()/*查询函数*/
{
int i;
char str[20],as;
do
{
printf("输入要查询的学生姓名:");
fflush(stdin);
gets(str);
for(i=0;i<now_no;i++)
if(!strcmp(stu[i].name,str))
{
printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
}
printf("\t\t按任意键返回主菜单.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void average()/*求平均数*/
{
int i;
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
}
}
void modify()/*修改数据函数*/
{
int i;
char str[20],as;
printf("输入要修改的学生姓名:");
fflush(stdin);
gets(str);
for(i=0;i<now_no;i++)
if(!strcmp(stu[i].name,str))
{
system("cls");
printf("\n\t\t输入新插入学员队信息\n");
printf("\n输入学生编号:");
fflush(stdin);
scanf("%d",&stu[i].no);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学员成绩1:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n输入学员成绩2:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学员成绩3:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
sort();
break;
}
system("cls");
}

void read()
{
FILE *fp;
int i;
char filepath[20];
printf("输入要读入的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
system("pause");
exit(0);
}
now_no=0;
for(i=0;i<MAX&&!feof(fp);i++)
{
fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave);
now_no++;
}
fclose(fp);
printf("保存的在文件%s中的所有信息已经读入!\n",filepath);
system("pause");
system("cls");
}

void del_file()
{
FILE *fp;
char filepath[20];
printf("输入要删除的文件路径:");
fflush(stdin);
gets(filepath);
fp=fopen(filepath,"w");
fclose(fp);
printf("保存的在文件%s中的所有信息已经删除!\n",filepath);
system("pause");
system("cls");
}

‘肆’ 大一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;

}

//答题不易,如采纳的,请不要无故删除问题。