10 交换机后台管理之端口管理
项目需求
交换机
端口:
1)端口名称
2)端口状态
3)端口的IP地址
4)端口类型
WAN
LAN
项目实现
1.添加菜单框架
#include
#include
#include
FILE *file;
void init(void) {
//打开文件
file = fopen("users.txt", "r");
if (!file) { //等效于 file == NULL
printf("文件打开失败");
//return 1;
exit(1);
}
}
void login(void) {
char name[32];
char password[16];
char line[128];
char name_tmp[32];
char password_tmp[16];
char *ret;
//输入用户名和密码
while (1) {
system("cls");
// 输入用户名和密码
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
//从文件中读取账号,并进行判断!
while (1) {
//读一行
ret = fgets(line, sizeof(line), file); //line: "admin 123456\n"
if (!ret) {
break;
}
sscanf(line, "%s %s", name_tmp, password_tmp);
if (!strcmp(name, name_tmp) && !strcmp(password, password_tmp)) {
break;
}
}
if (ret) { //用户名和密码匹配成功
break;
} else {
printf("用户名或密码错误!\n");
system("pause");
system("cls");
fseek(file, 0, SEEK_SET); //把文件内部的位置指针设置到文件头
}
}
}
void create_user(void) {
system("cls");
printf("\n\n---创建账号---\n\n");
printf("待实现...\n\n");
printf("\n\n按任意键返回主菜单");
fflush(stdin);
getchar();
}
void ip_admin(void) {
system("cls");
printf("\n\n---IP管理---\n\n");
printf("待实现...\n\n");
printf("\n\n按任意键返回主菜单");
fflush(stdin);
getchar();
}
void logout(void) {
system("cls");
fclose(file);
exit(0);
}
void input_error(void) {
system("cls");
printf("\n\n输入错误!\n\n");
printf("\n\n按任意键后,请重新输入\n\n");
fflush(stdin);
getchar();
}
void show_memu(void) {
system("cls");
// 打印功能菜单
printf("---交换机后台管理---\n");
printf("1. 创建账号\n");
printf("2. IP管理\n");
printf("3. 退出\n");
printf("4. 端口管理\n");
printf("请选择: ");
}
void show_ports(void) {
system("cls");
printf("---端口状态---\n");
printf("待实现.\n");
system("pause");
}
void set_ports(void) {
system("cls");
printf("---端口设置---\n");
printf("待实现.\n");
system("pause");
}
void port_admin(void) {
char n;
while(1) {
system("cls");
printf("1. 查看端口\n");
printf("2. 设置端口\n");
printf("3. 返回主菜单\n");
printf("请选择: ");
fflush(stdin);
scanf("%c", &n);
if (n == '1') {
show_ports();
} else if (n == '2') {
set_ports();
} else if (n == '3') {
break;
} else {
input_error();
}
}
}
int main(void) {
char n; //用户选择的菜单编号
init(); //初始化
login(); //登录
while (1) {
show_memu();
fflush(stdin);
scanf("%c", &n);
switch (n) {
case '1':
create_user();
break;
case '2':
ip_admin();
break;
case '3':
logout();
break;
case '4':
port_admin();
break;
default:
input_error();
break;
}
}
return 0;
}
2.端口信息的表示
添加类型定义和端口变量
struct port {
char name[16]; //端口的名称
int status; //1: 激活 0:禁用
char ip[16]; //192.168.1.5
char type[4]; //端口类型 LAN WAN
};
//定义了5个端口变量
struct port port1;
struct port port2;
struct port port3;
struct port port4;
struct port port5;
项目实现
void show_port(struct port port) {
printf("名称[%s]\t状态[%s]\tIP[%s]\t类型[%s]\n",
port.name,
port.status == 0 ? "禁用":"激活",
port.ip,
port.type);
}
void show_ports(void) {
system("cls");
printf("---端口状态---\n");
printf("PORT1:\t");
show_port(port1);
printf("PORT2:\t");
show_port(port2);
printf("PORT3:\t");
show_port(port3);
printf("PORT4:\t");
show_port(port4);
system("pause");
}
void set_port1(void) {
system("cls");
printf("---设置PORT1端口---\n");
printf("请输入端口名称: ");
scanf("%s", port1.name);
printf("请输入端口的状态:[0:禁止] [1:激活] ");
scanf("%d", &port1.status);
printf("请输入端口的类型:[LAN 或 WAN] ");
scanf("%s", port1.type);
printf("请输入端口的IP地址: ");
scanf("%s", port1.ip);
system("pause");
}
void set_port2(void) {
system("cls");
printf("---设置PORT2端口---\n");
printf("请输入端口名称: ");
scanf("%s", port2.name);
printf("请输入端口的状态:[0:禁止] [1:激活] ");
scanf("%d", &port2.status);
printf("请输入端口的类型:[LAN 或 WAN] ");
scanf("%s", port2.type);
printf("请输入端口的IP地址: ");
scanf("%s", port2.ip);
}
void set_port3(void) {
system("cls");
printf("---设置PORT3端口---\n");
printf("请输入端口名称: ");
scanf("%s", port3.name);
printf("请输入端口的状态:[0:禁止] [1:激活] ");
scanf("%d", &port3.status);
printf("请输入端口的类型:[LAN 或 WAN] ");
scanf("%s", port3.type);
printf("请输入端口的IP地址: ");
scanf("%s", port3.ip);
}
void set_port4(void) {
system("cls");
printf("---设置PORT4端口---\n");
printf("请输入端口名称: ");
scanf("%s", port4.name);
printf("请输入端口的状态:[0:禁止] [1:激活] ");
scanf("%d", &port4.status);
printf("请输入端口的类型:[LAN 或 WAN] ");
scanf("%s", port4.type);
printf("请输入端口的IP地址: ");
scanf("%s", port4.ip);
}
void set_port5(void) {
system("cls");
printf("---设置PORT5端口---\n");
printf("请输入端口名称: ");
scanf("%s", port5.name);
printf("请输入端口的状态:[0:禁止] [1:激活] ");
scanf("%d", &port5.status);
printf("请输入端口的类型:[LAN 或 WAN] ");
scanf("%s", port5.type);
printf("请输入端口的IP地址: ");
scanf("%s", port5.ip);
}
void set_ports(void) {
char n;
while(1) {
system("cls");
printf("---端口设置---\n");
printf("1. PORT1\n");
printf("2. PORT2\n");
printf("3. PORT3\n");
printf("4. PORT4\n");
printf("5. PORT5\n");
printf("6. 返回\n");
printf("请选择: ");
fflush(stdin);
scanf("%c", &n);
switch (n) {
case '1':
set_port1();
break;
case '2':
set_port2();
break;
case '3':
set_port3();
break;
case '4':
set_port4();
break;
case '5':
set_port5();
break;
case '6':
return;
default:
input_error();
break;
}
}
}
项目精讲
1.为什么要使用“结构”(结构体)
但需要表示一些复制信息时,使用单纯的数据类型很不方便。
比如:学生信息(学号,姓名,班级,电话,年龄)
2.什么是“结构”
结构,就是程序员自定义的一种“数据类型”
是使用多个基本数据类型、或者其他结构,组合而成的一种新的“数据类型”。
3.结构的定义
struct 结构名 {
成员类型 成员名;
成员类型 成员名;
};
实例:
struct student {
char name[16];
int age;
char tel[12];
};
特别注意:
1)要以struct开头
2)最后要使用分号
3)各成员之间用分号隔开
4.结构的初始化
demo
#include
struct student {
char name[16];
int age;
};
int main(void) {
struct student s1 = {
"Rock", 38
};
struct student s2 = {
.age = 100,
.name = "张三丰"
};
struct student s3;
s3.age = 40;
strcpy(s3.name, "杨过");
printf("%s, %d\n", s1.name, s1.age);
printf("%s, %d\n", s2.name, s2.age);
printf("%s, %d\n", s3.name, s3.age);
return 0;
}
5.结构的使用
// 定义结构体变量
// 注意:完整的类型名称是 struct student
// 而不只是student
struct student s1,s2;
struct student s3;
scanf(“%s”, s1.name);
s1.name = 25;
s2 = s1; //结构体变量之间可以直接赋值
使用形式:
结构体变量.成员变量
中间用 . 分隔
6.使用结构体作为函数参数
#include
#include
struct student {
char name[16];
int age;
char tel[12];
};
void work(struct student stu) {
stu.age++;
printf("%s,%d\n", stu.name, stu.age);
}
int main(void) {
struct student s;
strcpy(s.name, "Rock");
s.age = 38;
work(s); //结构体变量s作为函数参数,并不会改变s本身的值
printf("%s,%d\n", s.name, s.age);
return 0;
}
注意:
一般不建议把结构体直接作为函数参数。
因为结构体的size比较大,直接传递,消耗性能!
解决方案(使用指针)
7.全局变量、局部变量
test1.c
#include
void east_travel(void);
char master[16] = "女娲";
void west_travel(void) {
char master[16] = "唐僧";
printf("[西游]老大是: %s\n", master);
}
int main(void) {
char master[16] = "如来佛祖";
printf("[main]老大是: %s\n", master);
char c;
printf("是否进入女儿国? (Y或N)\n");
fflush(stdin);
scanf("%c", &c);
if (c=='Y' || c=='y') {
char master[16] = "女王";
printf("[main-女儿国]老大是: %s\n", master);
}
printf("[main]老大是: %s\n", master);
east_travel();
return 0;
}
test2.c
#include
extern char master[16]; //不能初始化!表示这个全局变量是在其他文件中定义的!
void east_travel(void) {
printf("[东游]老大是: %s\n", master);
}
项目练习
练习1
独立实现项目10
练习2
1.定义一个结构,用来描述一个游戏角色的基本信息。
该角色信息有,名称,性别,武力值
并让用户输入1个角色。
运行效果如下:
参考代码:
#include
struct role {
char name[32];
char sex; //'M':男 'W':女
int power;
};
int main(void) {
struct role r1, r2;
printf("请输入角色的名称: ");
scanf("%s", r1.name);
fflush(stdin);
printf("请输入角色的性别: ");
scanf("%c", &r1.sex);
printf("请输入角色的武力值: ");
scanf("%d", &r1.power);
printf("\n===角色设定===\n");
printf("姓名: %s\n", r1.name);
printf("性别:%c\n", r1.sex);
printf("武力值:%d\n", r1.power);
return 0;
}