這篇文章主要介紹了c/c++如何實(shí)現(xiàn)交換機(jī)后臺(tái)管理之端口管理,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供館陶網(wǎng)站建設(shè)、館陶做網(wǎng)站、館陶網(wǎng)站設(shè)計(jì)、館陶網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、館陶企業(yè)網(wǎng)站模板建站服務(wù),10余年館陶做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。


1)端口名稱
2)端口狀態(tài)
3)端口的IP地址
4)端口類型
WAN
LAN
1.添加菜單框架
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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("請(qǐng)輸入用戶名:");
scanf("%s", name);
printf("請(qǐng)輸入密碼:");
scanf("%s", password);
//從文件中讀取賬號(hào),并進(jìn)行判斷!
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("用戶名或密碼錯(cuò)誤!\n");
system("pause");
system("cls");
fseek(file, 0, SEEK_SET); //把文件內(nèi)部的位置指針設(shè)置到文件頭
}
}
}
void create_user(void) {
system("cls");
printf("\n\n---創(chuàng)建賬號(hào)---\n\n");
printf("待實(shí)現(xiàn)...\n\n");
printf("\n\n按任意鍵返回主菜單");
fflush(stdin);
getchar();
}
void ip_admin(void) {
system("cls");
printf("\n\n---IP管理---\n\n");
printf("待實(shí)現(xiàn)...\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輸入錯(cuò)誤!\n\n");
printf("\n\n按任意鍵后,請(qǐng)重新輸入\n\n");
fflush(stdin);
getchar();
}
void show_memu(void) {
system("cls");
// 打印功能菜單
printf("---交換機(jī)后臺(tái)管理---\n");
printf("1. 創(chuàng)建賬號(hào)\n");
printf("2. IP管理\n");
printf("3. 退出\n");
printf("4. 端口管理\n");
printf("請(qǐng)選擇: ");
}
void show_ports(void) {
system("cls");
printf("---端口狀態(tài)---\n");
printf("待實(shí)現(xiàn).\n");
system("pause");
}
void set_ports(void) {
system("cls");
printf("---端口設(shè)置---\n");
printf("待實(shí)現(xiàn).\n");
system("pause");
}
void port_admin(void) {
char n;
while(1) {
system("cls");
printf("1. 查看端口\n");
printf("2. 設(shè)置端口\n");
printf("3. 返回主菜單\n");
printf("請(qǐng)選擇: ");
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; //用戶選擇的菜單編號(hào)
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個(gè)端口變量
struct port port1;
struct port port2;
struct port port3;
struct port port4;
struct port port5;項(xiàng)目實(shí)現(xiàn)
void show_port(struct port port) {
printf("名稱[%s]\t狀態(tài)[%s]\tIP[%s]\t類型[%s]\n",
port.name,
port.status == 0 ? "禁用":"激活",
port.ip,
port.type);
}
void show_ports(void) {
system("cls");
printf("---端口狀態(tài)---\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("---設(shè)置PORT1端口---\n");
printf("請(qǐng)輸入端口名稱: ");
scanf("%s", port1.name);
printf("請(qǐng)輸入端口的狀態(tài):[0:禁止] [1:激活] ");
scanf("%d", &port1.status);
printf("請(qǐng)輸入端口的類型:[LAN 或 WAN] ");
scanf("%s", port1.type);
printf("請(qǐng)輸入端口的IP地址: ");
scanf("%s", port1.ip);
system("pause");
}
void set_port2(void) {
system("cls");
printf("---設(shè)置PORT2端口---\n");
printf("請(qǐng)輸入端口名稱: ");
scanf("%s", port2.name);
printf("請(qǐng)輸入端口的狀態(tài):[0:禁止] [1:激活] ");
scanf("%d", &port2.status);
printf("請(qǐng)輸入端口的類型:[LAN 或 WAN] ");
scanf("%s", port2.type);
printf("請(qǐng)輸入端口的IP地址: ");
scanf("%s", port2.ip);
}
void set_port3(void) {
system("cls");
printf("---設(shè)置PORT3端口---\n");
printf("請(qǐng)輸入端口名稱: ");
scanf("%s", port3.name);
printf("請(qǐng)輸入端口的狀態(tài):[0:禁止] [1:激活] ");
scanf("%d", &port3.status);
printf("請(qǐng)輸入端口的類型:[LAN 或 WAN] ");
scanf("%s", port3.type);
printf("請(qǐng)輸入端口的IP地址: ");
scanf("%s", port3.ip);
}
void set_port4(void) {
system("cls");
printf("---設(shè)置PORT4端口---\n");
printf("請(qǐng)輸入端口名稱: ");
scanf("%s", port4.name);
printf("請(qǐng)輸入端口的狀態(tài):[0:禁止] [1:激活] ");
scanf("%d", &port4.status);
printf("請(qǐng)輸入端口的類型:[LAN 或 WAN] ");
scanf("%s", port4.type);
printf("請(qǐng)輸入端口的IP地址: ");
scanf("%s", port4.ip);
}
void set_port5(void) {
system("cls");
printf("---設(shè)置PORT5端口---\n");
printf("請(qǐng)輸入端口名稱: ");
scanf("%s", port5.name);
printf("請(qǐng)輸入端口的狀態(tài):[0:禁止] [1:激活] ");
scanf("%d", &port5.status);
printf("請(qǐng)輸入端口的類型:[LAN 或 WAN] ");
scanf("%s", port5.type);
printf("請(qǐng)輸入端口的IP地址: ");
scanf("%s", port5.ip);
}
void set_ports(void) {
char n;
while(1) {
system("cls");
printf("---端口設(shè)置---\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("請(qǐng)選擇: ");
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.為什么要使用“結(jié)構(gòu)”(結(jié)構(gòu)體)
但需要表示一些復(fù)制信息時(shí),使用單純的數(shù)據(jù)類型很不方便。
比如:學(xué)生信息(學(xué)號(hào),姓名,班級(jí),電話,年齡)
2.什么是“結(jié)構(gòu)”
結(jié)構(gòu),就是程序員自定義的一種“數(shù)據(jù)類型”
是使用多個(gè)基本數(shù)據(jù)類型、或者其他結(jié)構(gòu),組合而成的一種新的“數(shù)據(jù)類型”。
3.結(jié)構(gòu)的定義
struct 結(jié)構(gòu)名 {
成員類型 成員名;
成員類型 成員名;
};
實(shí)例:
struct student {
char name[16];
int age;
char tel[12];
};1)要以struct開頭
2)最后要使用分號(hào)
3)各成員之間用分號(hào)隔開
demo
#include <stdio.h>
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;
}// 定義結(jié)構(gòu)體變量 // 注意:完整的類型名稱是 struct student // 而不只是student struct student s1,s2; struct student s3; scanf(“%s”, s1.name); s1.name = 25; s2 = s1; //結(jié)構(gòu)體變量之間可以直接賦值
使用形式:
結(jié)構(gòu)體變量.成員變量
中間用 . 分隔
#include <stdio.h>
#include <string.h>
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); //結(jié)構(gòu)體變量s作為函數(shù)參數(shù),并不會(huì)改變s本身的值
printf("%s,%d\n", s.name, s.age);
return 0;
}注意:
一般不建議把結(jié)構(gòu)體直接作為函數(shù)參數(shù)。
因?yàn)榻Y(jié)構(gòu)體的size比較大,直接傳遞,消耗性能!
解決方案(使用指針)
test1.c
#include <stdio.h>
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("是否進(jìn)入女兒國? (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 <stdio.h>
extern char master[16]; //不能初始化!表示這個(gè)全局變量是在其他文件中定義的!
void east_travel(void) {
printf("[東游]老大是: %s\n", master);
}gcc test1.c test2.c
獨(dú)立實(shí)現(xiàn)項(xiàng)目10
1.定義一個(gè)結(jié)構(gòu),用來描述一個(gè)游戲角色的基本信息。
該角色信息有,名稱,性別,武力值
并讓用戶輸入1個(gè)角色。
運(yùn)行效果如下:
參考代碼:
#include <stdio.h>
struct role {
char name[32];
char sex; //'M':男 'W':女
int power;
};
int main(void) {
struct role r1, r2;
printf("請(qǐng)輸入角色的名稱: ");
scanf("%s", r1.name);
fflush(stdin);
printf("請(qǐng)輸入角色的性別: ");
scanf("%c", &r1.sex);
printf("請(qǐng)輸入角色的武力值: ");
scanf("%d", &r1.power);
printf("\n===角色設(shè)定===\n");
printf("姓名: %s\n", r1.name);
printf("性別:%c\n", r1.sex);
printf("武力值:%d\n", r1.power);
return 0;
}感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“c/c++如何實(shí)現(xiàn)交換機(jī)后臺(tái)管理之端口管理”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
網(wǎng)頁題目:c/c++如何實(shí)現(xiàn)交換機(jī)后臺(tái)管理之端口管理
當(dāng)前網(wǎng)址:http://chinadenli.net/article26/gdpccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、商城網(wǎng)站、品牌網(wǎng)站制作、全網(wǎng)營銷推廣、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)