#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
void insertRecord();
int found();
/*欢迎界面*/
void welcome()
{
printf("* * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("* *\n");
printf("* --火车信息管理系统-- *\n");
printf("* ~~author:A Passing Kamen Rider~~ *\n");
printf("* any key:login ESC:quit *\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * *\n");
}
char level;
/*登录*/
int enter()
{
char name[64];
char pass[64];
char line[64];
FILE*user = fopen("user.txt","r");
int cnt = 3;
enter:
printf("系统用户(s)/ 普通用户(c)?");
level = tolower(getch());
printf("\n请输入您的用户名:\n");
scanf("%s",name);
printf("请输入您的密码:\n");
scanf("%s",pass);
char * eof;
while (eof = fgets(line,sizeof(line),user))
{
line[strlen(line) - 1] = '\0';
char * tok = strtok(line," ");
if (*tok == level)
{
tok = strtok(NULL," ");
if (strcmp(tok,name))
{
continue;
}
else
{
tok = strtok(NULL," ");
if (strcmp(tok,pass))
{
continue;
}
else
break;
}
}
else
continue;
}
if (feof(user) && --cnt > 0)
{
rewind(user);
printf("用户名或密码输入不对,您还有%d次机会\n",cnt);
goto enter;
}
if (cnt == 0)
{
return -1;
}
else
{
system("cls");
if (level == 's') //判断用户类型,进入不同的功能
{
getchar();
char into;
printf("请输入(提示:输入q进入查找,输入i进入添加,输入o退出程序):");
scanf("%c",&into);
if (into == 'q')
{
found();
}
else if (into == 'i')
{
insertRecord();
}
else if (into == 'o')
{
//退出系统
printf("\n结束查询。。。\n");
return 1;
}
else
printf("退出程序!");
}
else if (level == 'c')
{
found();//普通用户只有查找
}
}
fclose(user);
}
/*添加*/
void insertRecord()
{
system("cls");
printf("**** 添加车次 ****\n");
printf("按照格式“车次 发车时间 起始站 到站时间 终点站”添加,按回车键结束(提示:按任意键继续,按【ESC】退出)\n");
FILE*fp=fopen("train.txt","a");
char traininfo[128];
getchar();
while (getch() != 27)
{
printf("输入车次信息\n");
gets(traininfo);
fputs(traininfo,fp);
fputs("\n",fp);
}
fclose(fp);
printf("结束添加\n");
}
int found() {
char trainNumber[10]; //车次
char bgiTime[10]; //发车时间
char bgiStation[10]; //发车站点
char arrialTime[10]; //到站时间
char arrialStation[10]; //到站站点
char line[100]; //文件中读取的每一行
char a1[10];
char a2[10];
char a3[10];
char a4[10];
printf("*****查询火车信息*****\n");
FILE* ft = fopen("train.txt", "r");
char* pos;
int lei; //查询类型
printf("1:按车次搜索;2:按发车时间搜索;3:按发车站搜索;4:按到站时间搜索;5:按到站站点搜索;6:退出\n");
printf("请输入查询类型>>");
scanf("%d", &lei);
if (lei == 6) { //退出系统
printf("\n结束查询。。。\n");
fclose(ft);
return 0;
}
switch (lei) {
case 1: {printf("请输入车次信息:"); scanf("%s", &trainNumber);
while (pos = fgets(line, sizeof(line), ft))
{
line[strlen(line) - 1] = '\0';
char* tok = strtok(line, " ");
if (strcmp(tok, trainNumber)) {
continue;
}
else {
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s\n", tok);
}
}break; }
case 2: {printf("请输入发车时间:"); scanf("%s", bgiTime);
while (pos = fgets(line, sizeof(line), ft))
{
line[strlen(line) - 1] = '\0';
char* tok = strtok(line, " ");
strcpy(a1, tok);
tok = strtok(NULL, " ");
if (strcmp(tok, bgiTime)) {
continue;
}
else {
printf("%s ", a1);
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s\n", tok);
continue;
}
}break; }
case 3: {printf("请输入发车站点:"); scanf("%s", bgiStation);
while (pos = fgets(line, sizeof(line), ft))
{
line[strlen(line) - 1] = '\0';
char* tok = strtok(line, " ");
strcpy(a1, tok);
tok = strtok(NULL, " ");
strcpy(a2, tok);
tok = strtok(NULL, " ");
if (strcmp(tok, bgiStation)) {
continue;
}
else {
printf("%s ", a1);
printf("%s ", a2);
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s\n", tok);
continue;
}
}break; }
case 4: {printf("请输入到站时间:"); scanf("%s", arrialTime);
while (pos = fgets(line, sizeof(line), ft))
{
line[strlen(line) - 1] = '\0';
char* tok = strtok(line, " ");
strcpy(a1, tok);
tok = strtok(NULL, " ");
strcpy(a2, tok);
tok = strtok(NULL, " ");
strcpy(a3, tok);
tok = strtok(NULL, " ");
if (strcmp(tok, arrialTime)) {
continue;
}
else {
printf("%s ", a1);
printf("%s ", a2);
printf("%s ", a3);
printf("%s ", tok);
tok = strtok(NULL, " ");
printf("%s\n", tok);
continue;
}
}break; }
case 5: {printf("请输入到站站点:"); scanf("%s", arrialStation);
while (pos = fgets(line, sizeof(line), ft))
{
line[strlen(line) - 1] = '\0';
char* tok = strtok(line, " ");
strcpy(a1, tok);
tok = strtok(NULL, " ");
strcpy(a2, tok);
tok = strtok(NULL, " ");
strcpy(a3, tok);
tok = strtok(NULL, " ");
strcpy(a4, tok);
tok = strtok(NULL, " ");
if (strcmp(tok, arrialTime)) {
continue;
}
else {
printf("%s ", a1);
printf("%s ", a2);
printf("%s ", a3);
printf("%s ", a4);
printf("%s\n", tok);
continue;
}
} break; }
default: {
printf("没有这个查询类型!\n");
break; }
}
fclose(ft);
printf("结束查询。。。\n");
return 0;
}
int main()
{
welcome();
enter();
}
题主的意思是删除数组中的数据吗,C语言没有集合比较尴尬,找到删除数据后,利用循环将后一个数据覆盖前一个数据实现
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632