车友拼车系统
一、课程内容和要求
为倡导绿色低碳生活提高私家车的利用率试设计一个车友拼车系统。该系统要求建立一个简单的拼车管理系统有车的车友可以将自己出行线路和时间输入到系统中无车的车友可以查看已有的拼车信息也可以将自己的拼车需求输入到系统中。该系统具有排序、查找、插入、显示等功能。通过此课题熟练掌握文件、数组、指针的各种操作 以及一些算法思想的应用。
二、需求分析
2. 1要求
1用C语言实现程序设计
2利用结构体进行相关信息处理
3画出查询模块的流程图
4系统的各个功能模块要求用函数的形式实现
5界面友好良好的人机互交程序要有注释输入信息符合逻辑如输入月份不
能输入13月等。
2.2任务
1车友信息包括用户名、密码、真实姓名、所在地、联系电话。
拼车信息包括用户名、车辆状态有车或无车 出发地点 目的地点时
间真实姓名联系方式
2数据使用文件存储无需重复输入数据。
3需要实现的功能
1用户注册与登录功能
2有车者的拼车信息发布功能查询拼车需求功能
3无车者浏览、查询拼车信息拼车需求信息录入功能
4可以查询从某出发地点到达某目的地点的车辆情况
5可以按日期对拼车信息进行排序。
程序设计报告
2.3开发环境
VC++6.0在内存中的各种操作可以采用数组方式或是指针
三、概要设计struct User 定义车友信息
{char username[20] ;char password[20] ;char truename[20] ;char location[20] ;char telephone[12] ;
} ;struct Date 定义日期
{char year[5] ;char month[3] ;char day[3] ;
} ;struct Information 定义拼车信息
{char car[5] ;char startplace[20] ;char destination[20] ;
Date d; 含有日期结构体的元素
User u; 含有车友信息结构体的元素
} ;
2
程序设计报告
void zhuce(User *u, int i,FILE*fp) 用户注册若源文件中已有同名用户则报错“该用户名已存在请重新输入”注册成功后进入主菜单void denglu(User *u, int i) 用户登录若用户名和密码与已存信息不符则报错“用户名或密码不正确请重新输入”登陆成功后进入主菜单void chaxun(Information *I, int j) 按出发地和目的地查询若配套的出发地和目的地不存在则报错“对不起不存在你要查询的信息”void gongchexinxi (Information *I, int j) 查询供车信息输出所有有车者的信息void pinchexuqiu(Information *I, int j) 查询拼车需求输出所有无车者的信息void shuchusuoyou(Information *I, int j) 输出所有车友的信息void shuru(Information *I, int j,FILE*fp) 用户录入自己的信息在其中会加入一个算法来判断输入的日期是否合法如有关闰年与平年的二月一年12个月哪个月有30天哪个月有31天void paixu(Information *I, int j,FILE*fp) 根据日期排序输出所有信息void menu() 主菜单界面用户可以自由选择需求void run(FILE*fp,User *u, Information *I, int i, int j, int a) 主运行界面配合在menu界面时用户的选择运行程序
FILE*fp1 D盘源文件1 “用户信息” txt文本原有20条信息用以存放用户信息在注册和登陆时可以调用并逐个添加记录永久有效
FILE*fp2 D盘源文件2 “拼车信息” txt文本原有20条信息用以存放拼车信
3
程序设计报告
息其中用户名和密码与“用户信息”中的对应车友可以添加自己的信息也可以从中调看别人的信息永久有效。
四、源程序代码
#inc lude<stdio.h>
#inc lude<stdlib.h>
#inc lude<string.h>
#define N 1000struct User //构造车友信息结构体
{char username[20];char password[20];c har truename[20];char location[20];char telephone[12];
};typedef struct User User;struct Date //构造日期结构体
{char year[5];char month[3];char day[3];
};typedef struct Date Date;struct Information //构造拼车信息结构体
{charcar[5];char startplac e[20];char destination[20];
Date d; //定义函数
User u; //定义函数
};typedef struct Information Information;void zhuc e(User *u,int i,FILE*fp);void deng lu(Us er *u,int i);void chaxun(Information*I,int j);void gongchexinxi(Information*I,int j);void pinchexuqiu(Information*I,int j);void shuchusuoyou(Information*I,int j);void shuru(Information*I,int j,FILE*fp);
4
程序设计报告
void paixu(Information*I,int j,FILE*fp);void menu();void run(FILE*fp,User *u,Information*I,int i,int j,int a);int main() //主函数
{int i=0;int j=0;int a;
User u[N];
Information I[N];
FILE*fp1;
FILE*fp2;fp 1=fopen("D:\\用户信息.txt","a+");if(!fp1)
{printf("file cannot be opened");exit(1);
}while(!feof(fp1))
{fsc anf(fp 1,"%s%s%s%s%s",&u[i].username,&u[i].passw ord,&u[i].truename,&u[i].location,&u[i].telephone);i++;
}fp2=fopen("D:\\拼车信息.txt","a+");if(!fp2)
{printf("file cannot be opened");exit(1);
}while(!feof(fp2))
{fsc anf(fp2,"%s%s%s%s%s%s%s%s%s",&I[j].u.us ername,&I[j].c ar,&I[j].startplac e,&I[j].destination,&I[j].d.year,&I[j].d.month,&I[j].d.day,I[j].u.truename,I[j].u.telephone);j++;
}
"****************************************************************************
**\n");printf(" 欢迎进入拼车系统 \n");
"****************************************************************************
**\n");
5
程序设计报告
printf(" 1 注册\n");printf(" 2 登录\n");
"****************************************************************************
**\n");printf("请选择所要进行的操作对应的序号 ");do
{printf("选择1还是选择2 \n");scanf("%d",&a);
}while(a!=1&&a!=2);switch(a)
{c as e 1: zhuc e(u,i,fp 1); break;case 2: denglu(u,i); break;
}if(i)
{do
{m enu();printf("请输入你的选择 ");scanf("%d",&a);if(a>=0&&a<=7)run(fp 2,u,I,i,j,a);els eprintf("选择错误请重新选择 \n");
}while(a);
}fclose(fp1);fclose(fp2);return 0;
}void menu()
{printf(">>>>>>>>>>>>>>>>>主菜单<<<<<<<<<<<<<<<<<
\n");
6
程序设计报告
;
}void run(FILE*fp,User *u,Information*I,int i,int j,int a) //主运行函数
{switch(a)
{case 1:shuchusuoyou(I,j); break;case 2:gongchexinxi(I,j); break;case 3:pinchexuqiu(I,j); break;case4:c ase 5:shuru(I,j,fp); break;c ase 6:chaxun(I,j); break;case 7:paixu(I,j,fp); break;case 0: printf("\n >>>>>>>>######################欢 迎 下 次 光 临
###########################<<<<<<<\n"); break;
}
}void zhuc e(User *u,int i,FILE*fp) //用户注册
{int k,a;printf("请输入用户名 ");do
{a=0;sc anf("%s",&u[i-1].username);for(k=0;k<i-1;k++) //检验用户名是否已存在
{if(strcmp(u[i-1].us ername,u[k].us ername)==0)
{printf("该用户名已存在请重新输入 \n");a=1;break;
}
}
}while(a);printf("\n请输入密码 ");scanf("%s",&u[i-1].password);printf("\n真实姓名 ");s c anf("%s",&u[i-1].truename);printf("\n所在地 ");scanf("%s",&u[i-1].location);
7
程序设计报告
printf("\n联系电话 ");scanf("%s",&u[i-1].telephone);printf("\n注册成功!\n");fprintf(fp,"%-13s%-13 s%-10s%-10s%-12s",&u[i-1].us ername,&u[i-1].passw ord,&u[i-1].truename,&u[i-1].location,&u[i-1].telephone); //将用户信息记录到文本文件中fprintf(fp,"\r\n");
}void deng lu(Us er *u,int i) //用户登录
{int k,a=1;char s1[20],s2[20];do
{printf("用户名 ");scanf("%s",&s1);printf("\n密码 ");scanf("%s",&s2);for(k=0;k<i-1;k++) //检验用户名和密码是否匹配
{if(strcmp(s 1,u[k].us ername)==0&&strcmp(s 2,u[k].passw ord)==0)
{a=0;break;
}
}if(a==1)printf("\n用户名或者密码不正确请重新输入 \n"); //报错
}while(a);printf("登陆成功 \n");
}void chaxun(Information*I,int j) //根据输入的出发地和目的地筛选出来的拼车信息
{int k,a=0;char s1[20],s2[20];printf("\n请输入出发地点 ");scanf("%s",&s1);printf("\n请输入目的地 ");scanf("%s",&s2);for(k=0;k<j-1;k++)
{
8
程序设计报告
if(strc mp(s 1,I[k].startplac e)==0&&strc mp(s 2,I[k].destination)==0)
{a=1;printf("用户名 车辆状况 出发地 目的地 年 月 日 真实姓名联系电话\n");printf("%-13 s%-10s%-10s%-9s%-6s%-4s%-6s%-10s%-12s",&I[k].u.us ername,&I[k].c ar,&I[k].startplac e,&I[k].des tination,&I[k].d.year,&I[k].d.month,&I[k].d.day,&I[k].u.truename,&I[k].u.telephone);
}
}if(a==0)printf("对不起不存在你所要查询的信息 \n"); //报错
}void gongchexinxi(Information*I,int j) //输出供车信息
{int k;printf("用户名 车辆状况 出发地 目的地 年 月 日 真实姓名 联系电话\n");for(k=0;k<j-1;k++)
{if(s trc mp(I[k].c ar,"有")==0)
{printf("%-13 s%-10s%-10s%-9s%-6s%-4s%-6s%-10s%-12s",&I[k].u.us ername,&I[k].c ar,&I[k].startplac e,&I[k].des tination,&I[k].d.year,&I[k].d.month,&I[k].d.day,&I[k].u.truename,&I[k].u.telephone);
}
}
}void pinchexuqiu(Information*I,int j) //输出有拼车需求的用户的信息
{int k;printf("用户名 车辆状况 出发地 目的地 年 月 日 真实姓名 联系电话\n");for(k=0;k<j-1;k++)
{if(s trc mp(I[k].c ar,"无")==0)
{printf("%-13 s%-10s%-10s%-9s%-6s%-4s%-6s%-10s%-12s",&I[k].u.us ername,&I[k].c ar,&I[k].startplac e,&I[k].des tination,&I[k].d.year,&I[k].d.month,&I[k].d.day,&I[k].u.truename,&I[k].u.telephone);
}
}
9
DMIT.io是成立于2018年的一家国外主机商,提供VPS主机和独立服务器租用,数据中心包括中国香港、美国洛杉矶和日本等,其中日本VPS是新上的节点,基于KVM架构,国际线路,1Gbps带宽,同时提供月付循环8折优惠码,或者年付一次性5折优惠码,优惠后最低每月8.72美元或者首年65.4美元起,支持使用PayPal或者支付宝等付款方式。下面列出部分日本VPS主机配置信息,价格以月付为例。CPU:...
greencloudvps怎么样?greencloudvps是一家国外主机商,VPS数据中心多,之前已经介绍过多次了。现在有几款10Gbps带宽的特价KVM VPS,Ryzen 3950x处理器,NVMe硬盘,性价比高。支持Paypal、支付宝、微信付款。GreenCloudVPS:新加坡/美国/荷兰vps,1核@Ryzen 3950x/1GB内存/30GB NVMe空间/1TB流量/10Gbps...
EdgeNat 商家在之前也有分享过几次活动,主要提供香港和韩国的VPS主机,分别在沙田和首尔LG机房,服务器均为自营硬件,电信CN2线路,移动联通BGP直连,其中VPS主机基于KVM架构,宿主机采用四路E5处理器、raid10+BBU固态硬盘!最高可以提供500Gbps DDoS防御。这次开年活动中有提供七折优惠的韩国独立服务器,原生IP地址CN2线路。第一、优惠券活动EdgeNat优惠码(限月...