谁能帮我用C语言吧《折线图》做出来啊,在TC环境里面的。(不是C++哦)

供稿:hz-xin.com     日期:2024-05-05
哪位高手能帮我用C语言(不是C++哦)和数据结构做个停车场管理系统?包括实验报告!拜托啦!!!!!!

把扩展名改成CPP,然后编译连接
///////////////////////////////
下面这个程序是我大二上数据结构课时交的作业,现在正好电脑里面放着,所以就给你,应该满足你老师的要求了.编译环境是 VC++ 6.0
如果不会用的话就在问题补充里说,那个"例"是我临时给你打上去的,随便写了点,你要看不懂例子不会输命令就问我.
/*****************************************************************/

#include
#include
#include
#include
#include


// 清空当前屏幕
#define ClearScreen() system( "cls" )

// 显示字符串 szPrompt 并等待用户按下任意键
#define Pause( szPrompt ) printf( "%s", szPrompt ),getch()

typedef struct carinformation // 车辆信息
{
char szRegistrationMark[64]; // 车牌号
char szArrivalTime[16]; // 到达时间
char szEntranceTime[16]; // 进入停车场(开始计费)时间
char szDepartureTime[16]; // 离开时间
} TCARINFORMATION, *LPTCARINFORMATION;


typedef struct carstack
{
LPTCARINFORMATION lpCarInformation; // 车辆信息
int nTop; // 栈顶元素下标
int nStackSize; // 栈容量
} TCARSTACK, *LPTCARSTACK;


// 初始化栈 lpCarStack, 将其容量设置为 nSize
void InitStack( LPTCARSTACK &lpCarStack, int nSize )
{
lpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ) );
lpCarStack->lpCarInformation = ( LPTCARINFORMATION ) malloc(
nSize * sizeof ( TCARINFORMATION )
);
lpCarStack->nTop = -1;
lpCarStack->nStackSize = nSize;
}


// 车辆信息 carinfo 入栈 lpCarStack
void Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo )
{
lpCarStack->nTop++;
lpCarStack->lpCarInformation[lpCarStack->nTop] = carinfo;
}


// 车辆信息从栈 lpCarStack 中弹出并存入 carinfo
void Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo )
{
carinfo = lpCarStack->lpCarInformation[lpCarStack->nTop];
lpCarStack->nTop--;
}


// 若栈 lpCarstack 空,返回 TRUE;否则,返回 FALSE
BOOL IsStackEmpty( LPTCARSTACK lpCarStack )
{
return lpCarStack->nTop == -1;
}


// 若栈 lpStackFull 满,返回 TRUE;否则,返回 FALSE
BOOL IsStackFull( LPTCARSTACK lpCarStack )
{
return lpCarStack->nTop == ( lpCarStack->nStackSize - 1 );
}


// 销毁栈 lpCarStack,将指针 lpCarStack 置为 NULL
void DestroyStack( LPTCARSTACK &lpCarStack )
{
free( lpCarStack->lpCarInformation );
free( lpCarStack );
lpCarStack = NULL;
}


typedef struct carnode // 链队结点信息
{
TCARINFORMATION carinfo; // 车辆信息
struct carnode *lpNext; // 指向下一个元素的指针
} TCARNODE, *LPTCARNODE;


typedef struct carqueue // 链队
{
LPTCARNODE lpHead; // 头结点
LPTCARNODE lpRear; // 指向当前队尾的指针
int nEffectiveSize; // 当前队中元素个数
} TCARQUEUE, *LPTCARQUEUE;


// 初始化链队 lpCarQueue
void InitQueue( LPTCARQUEUE &lpCarQueue )
{
lpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE ) );
lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ) );
lpCarQueue->lpHead->lpNext = NULL;
lpCarQueue->lpRear = lpCarQueue->lpHead;
lpCarQueue->nEffectiveSize = 0;
}


// 车辆信息 carinfo 入队 lpCarQueue
void EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION carinfo )
{
LPTCARNODE lpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode ) );
lpCarNode->carinfo = carinfo;
lpCarNode->lpNext = NULL;
lpCarQueue->lpRear->lpNext = lpCarNode;
lpCarQueue->lpRear = lpCarQueue->lpRear->lpNext;
lpCarQueue->nEffectiveSize++;
}


// 队头元素从链队 lpCarQueue 中出队并存入 carinfo
void DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION &carinfo )
{
LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;
carinfo = lpTemp->carinfo;
lpCarQueue->lpHead->lpNext = lpTemp->lpNext;
free( lpTemp );
lpCarQueue->nEffectiveSize--;
}


// 若链队 lpCarQueue 为空,返回 TRUE;否则,返回 FALSE
BOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue )
{
return lpCarQueue->nEffectiveSize == 0;
}


// 销毁链队 lpCarQueue
void DestroyQueue( LPTCARQUEUE &lpCarQueue )
{
LPTCARNODE lpNextCarNode = NULL;
for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead; lpCarNode != NULL; lpCarNode = lpNextCarNode )
{
lpNextCarNode = lpCarNode->lpNext;
free( lpCarNode );
}
free( lpCarQueue );
lpCarQueue = NULL;
}


// 将字符串时间格式转换为数字(分钟)格式,例如 12:36 将被转换为 756 ( 12 * 60 + 36 )
int ConvertTimeFormat( char *lpTime )
{
int nHour = 0;
int nMinute = 0;

sscanf( lpTime, "%d:%d", &nHour, &nMinute );

return nHour * 60 + nMinute;
}


// 根据在停车场内的停留时间 nContinuanceMinutes (分钟)计算费用
double CalculateExpense( int nContinuanceMinutes )
{
return nContinuanceMinutes * ( 5.0 / 60 );
}


int main( void )
{
int nParkCapability = 0; // 停车场容量

putchar( '
' );
printf( "请输入停车场容量:" );
scanf( "%d", &nParkCapability );

LPTCARSTACK lpCarStack = NULL; // 停车场,用栈模拟
InitStack( lpCarStack, nParkCapability );

LPTCARQUEUE lpCarQueue = NULL; // 便道,用链队模拟
InitQueue( lpCarQueue );

char cCommandType = NULL; // 命令类型
char szUserInput[128] = { NULL }; // 用户输入
do
{
ClearScreen();
putchar( '
' );
puts( "--------------------" );
puts( "[命令类型]" );
puts( "A - 车辆到达" );
puts( "D - 车辆离开" );
puts( "E - 停止输入" );
puts( "O - 显示当前停车场和便道使用情况" );
putchar( '
' );
puts( "例:" );
puts( "A,冀A1234,14:26" );
puts( "D,冀A1234,16:51" );
puts( "E" );
puts( "O" );
putchar( '
' );
printf( "请输入命令:" );
scanf( "%s", szUserInput );
puts( "--------------------" );

char szCarInformation[128] = { NULL };
sscanf( szUserInput, // 将命令类型与车辆信息分开存放
"%c,%s",
&cCommandType, // 用户输入的前半部分,即命令类型
szCarInformation // 用户输入的后半部分,即车辆信息
);

char *lpCommaLocation = NULL; // 车辆信息字符串中的逗号位置

for ( lpCommaLocation = szCarInformation; *lpCommaLocation != '\0'; lpCommaLocation++ )
{
if ( *lpCommaLocation == ',' )
{
break;
}
}
*lpCommaLocation = '\0';

TCARINFORMATION carinfo = { NULL }; // 存储本次用户输入的车辆信息

strcpy( carinfo.szRegistrationMark, szCarInformation );

if ( cCommandType == 'A' )
{
strcpy( carinfo.szArrivalTime, lpCommaLocation + 1 );

if ( FALSE == IsStackFull( lpCarStack ) )
{
strcpy( carinfo.szEntranceTime, carinfo.szArrivalTime );
Push( lpCarStack, carinfo );
printf( "已进入停车场第 %d 个车位
",
lpCarStack->nTop + 1
);
printf( "车牌号:%s
", carinfo.szRegistrationMark );
printf( "进入时间:%s
", carinfo.szEntranceTime );
puts( "是否收费:是" );
}
else
{
EnQueue( lpCarQueue, carinfo );
printf( "停车场已满,已停放在便道的第 %d 个车位
",
lpCarQueue->nEffectiveSize
);
printf( "车牌号:%s
", carinfo.szRegistrationMark );
printf( "停放时间:%s
", carinfo.szArrivalTime );
puts( "是否收费:否" );
}
}
else if ( cCommandType == 'D' )
{
strcpy( carinfo.szDepartureTime, lpCommaLocation + 1 );

LPTCARSTACK lpTempCarStack = NULL;
InitStack( lpTempCarStack, nParkCapability );

TCARINFORMATION carinfoOut = { NULL };

BOOL bIsCarFound = FALSE;
while ( FALSE == IsStackEmpty( lpCarStack ) )
{
Pop( lpCarStack, carinfoOut );
if ( 0 != strcmp( carinfoOut.szRegistrationMark, carinfo.szRegistrationMark ) )
{
Push( lpTempCarStack, carinfoOut );
}
else
{
bIsCarFound = TRUE;
break;
}
}

while ( FALSE == IsStackEmpty( lpTempCarStack ) )
{
TCARINFORMATION tempcarinfo = { NULL };
Pop( lpTempCarStack, tempcarinfo );
Push( lpCarStack, tempcarinfo );
}

if ( FALSE == bIsCarFound )
{
printf( "车牌号为 %s 的车未进入停车场.
", carinfo.szRegistrationMark );
Pause( "--------------------
按任意键输入下一条信息...
" );
continue;
}

strcpy( carinfoOut.szDepartureTime, carinfo.szDepartureTime );
int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime );
int nDepartureTime = ConvertTimeFormat( carinfoOut.szDepartureTime );
int nContinuanceMinutes = nDepartureTime - nEntranceTime;
printf( "计费时段:%s - %s (共 %d 分钟)
",
carinfoOut.szEntranceTime,
carinfoOut.szDepartureTime,
nContinuanceMinutes
);
double rExpense = CalculateExpense( nContinuanceMinutes );
printf( "应交纳的费用:%.1lf 元
", rExpense );

if ( FALSE == IsQueueEmpty( lpCarQueue ) )
{
TCARINFORMATION tempcarinfo = { NULL };
DeQueue( lpCarQueue, tempcarinfo );
strcpy( tempcarinfo.szEntranceTime, carinfoOut.szDepartureTime );
Push( lpCarStack, tempcarinfo );
puts( "--------------------" );
printf( "停放在便道的第 1 个车位,车牌号为 %s 的车已进入停车场
",
tempcarinfo.szRegistrationMark
);
}
}
else if ( cCommandType == 'E' )
{
puts( "********************" );
puts( "陈赛 - Build20090507
" );
puts( "********************" );
break;
}
else if ( cCommandType == 'O' )
{
ClearScreen();
putchar( '
' );
puts( "[停车场使用情况]
" );
puts( "[车位][车牌号][到达时间][进入(开始计费)时间]
");
for ( int i = 0; i nTop; i++ )
{
printf( "%d%s%s%s
",
i + 1,
lpCarStack->lpCarInformation[i].szRegistrationMark,
lpCarStack->lpCarInformation[i].szArrivalTime,
lpCarStack->lpCarInformation[i].szEntranceTime
);
}
putchar( '
' );
putchar( '
' );
putchar( '
' );
puts( "[便道使用情况]
" );
puts( "[车位][车牌号][到达时间][进入(开始计费)时间]
");
int nNum = 0;
for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead->lpNext;
lpCarNode != NULL; lpCarNode = lpCarNode->lpNext )
{
nNum++;
printf( "%d%s%s%s
",
nNum,
lpCarNode->carinfo.szRegistrationMark,
lpCarNode->carinfo.szArrivalTime,
lpCarNode->carinfo.szEntranceTime
);
}
putchar( '
' );
}
else
{
puts( "输入信息有误.第一个字符只能为 'A' 或 'D' 或 'E' 或 'O' (区分大小写)." );
}
Pause( "--------------------
按任意键输入下一条信息.
" );
} while ( TRUE );

DestroyStack( lpCarStack );
DestroyQueue( lpCarQueue );

Pause( "
按任意键退出程序...
" );

return 0;
}

你确认您是学计算机的?这个程序应该可以讲是个很简单的课程设计,建议你还是好好自己做做吧,这样也能多学点东西,做为一个过来人好心的建议你自己动手,别等毕业了后悔当年没有好好学习。我就是这样悲摧的,毕业后在工作上从头学起,还好熬过来了。

我编了一个,你试试。
用了两个库函数,一个是initgraph(),一个是line()。
initgraph需要3个参数,原型是
initgraph(图形驱动器代号,工作模式,图形驱动器文件路径).
所以用的时候要把最后一个参数改一下,改成你的TC目录的路径。
即把下面代码中的 initgraph(&driver, &mode, "D:\\TC2"); 最后一个"D:\\TC2"改成你的tc的路径。
line需要四个参数,原型是
line(起点x坐标,起点y坐标,终点x坐标,终点y坐标)
这样只要知道起点和终点的坐标就可以画一条直线了,然后多画几次,就形成了折线。
代码:
#include <stdio.h>
#include <GRAPHICS.H>

void main()
{
int driver=VGA;
int mode = VGAHI;
initgraph(&driver, &mode, "D:\\TC2"); //to change
line(0,300,100,300);
line(100,300,200,250);
line(200,250,400,400);
line(400,400,500,350);
getchar();
}

谁能帮我用C语言吧《折线图》做出来啊,在TC环境里面的。(不是C++哦...
答:initgraph(图形驱动器代号,工作模式,图形驱动器文件路径).所以用的时候要把最后一个参数改一下,改成你的TC目录的路径。即把下面代码中的 initgraph(&driver, &mode, "D:\\TC2"); 最后一个"D:\\TC2"改成你的t...

如何用C语言画折线图
答:建议学习C语言的ACLLib基本图形函数,这个涉及的东西太懂了,三言两语说不完,建议网上自己查阅资料,学完这个你就会画折线图了,不难的,学会很简单的。

如何用c语言制作电压图?
答:用直线依次连接相邻两个电位点,即得该电路的电位图。电压图(C语言编译中电压用U表示)是一种平面坐标一、四两象限内的折线图。其纵坐标为电压值,横坐标为俩点间的电压。要制作某一电路的电压图,先以一定的顺序对电路...

请问如何用prism做出折线图,怎么做?
答:请问如何用prism做出折线图其在某一个时间点有两组数据打开 GraphPad Prism0 软件,选择 XY, 选择 Points & connecting line(点加连线),选择已 知 Mean,SD,N 作图,Create误差棒的设置。第一步,根据下图标记的进行...

用C或者C++编写一个简单的数据图形化工具,根据输入数据生成五种图表...
答:首先楼主只用printf或cout函数是不可能画出图的,所以要使用可以画图的函数,GDI就是个函数包,是WIN API函数库中的图形函数部分,能让你在屏幕上画任何图形。WIN API是C语言函数调用风格的编程方式,为了发挥C++的优势,MFC...

流程图怎么画
答:相关的还有一种PAD图,对PASCAL或C语言都极适用。今天来教大家画流程图,感兴趣下面一起来看看吧!1、首先【插入】-【形状】-【新建绘图画布】。2、新建绘图画布如图 自动跳转到格式选项。3、可以点击矩形等你要的图形,到...

流程图怎么画
答:相关的还有一种PAD图,对PASCAL或C语言都极适用。今天来教大家画流程图,感兴趣下面一起来看看吧!1、首先【插入】-【形状】-【新建绘图画布】。2、新建绘图画布如图 自动跳转到格式选项。3、可以点击矩形等你要的图形,到...

如何用Excel做出漂亮的累积折线图?
答:1.按正常方式画好图表,分别设置好柱形和折线图类型,分好主、次坐标轴,使图表具备帕累图雏形 2.在累积百分比数据系列最前面,加入一个0%作为起点 3.点击累积百分比折线,打开“源数据”,将数据系列的“值”的范围扩大...

怎样用excel电子表格做出单个折线图?
答:新建表格 新建一个表格,把表格的数据按下列方法排序,虽然这种排序稍微浪费一点时间,但是不要急,等表格出来的一瞬间,就觉得值了。这个是4个企业的2011年-2015年的企业销量,一般用折线图单独表示出来,清晰明了,没有交叉...

用C语言怎么做出这种表格边框
答:┓ ┗ ┏ ┛ 用搜狗输入法,输入v9后就能看到这些特殊字符。这些都是双字节字符,也就是和汉字一样。把它们当做字符串(不是字符而是字符串!)直接用printf打印他们就行。如果嫌麻烦,也有更简单的方法:写8行puts puts(...