C語言開發東北大學20級大作業—活力長者社群(附原始碼)
東北大學20級大作業—活力長者社群
活力長者社群
東北大學20級大作業—活力長者社群
開發語言:C語言
開發者:20級軟體2009楊富超等
使用工具:vs2019
CSDN原始碼下載:檔案還未通過稽核
任何疑問歡迎留言
一,系統使用展示(部分)
1,yufuchao.h
2,長者社群.cpp
3,檔案需要
二,系統功能介紹
1,系統功能介紹
1,會員管理(新建,查詢,修改,刪除)
2,房屋管理(新建,查詢,修改,刪除)
3,入住管理(會員入住處理,入住資訊查詢)
4,娛樂設施管理(新建,查詢,修改,刪除)
5,使用者管理(新建,查詢,修改,刪除)
6,檔案管理(儲存資料到檔案,列印檔案資料,清空檔案)
0,退出系統
2,系統main函式,while迴圈在外,系統程式能夠持續執行,switch判斷語句進行功能選擇與函式切換。
int main(void)//主函式
{
system("color 0E");//改變字型顏色
while (1)
{
Menu();//列印選單
char ch = getchar();
switch (ch)
{
case '1':
MemberManagement();//會員管理功能
break;
case '2':
HouseManagement();//房屋管理功能
break;
case '3':
PersonManagement();//會員入住管理功能
break;
case '4':
AmusementManagement();//娛樂設施管理功能
break;
case '5':
UserManagement();//使用者管功能
break;
case '6':
FileMenu();//檔案資料操作功能
break;
case '0':
return 0;//退出系統
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");//暫停
system("cls");//清屏
break;
}
}
return 0;
}
3,全域性共用結構體
偷懶了,為了減少程式碼量,用了共用結構體
//全域性結構體!!!
struct Entity {
char name[10] = { '\0' };//姓名,名稱
char name1[10] = { '\0' };
char work[10] = { '\0' };//職位
int message = 0;//入住
long long int number = 0;//電話號碼,可使用人數
struct Entity* next;
};
//全域性頭節點,尾節點
struct Entity* head1, * end1;//房屋
struct Entity* head2, * end2;//會員
struct Entity* head3, * end3;//設施
struct Entity* head4, * end4;//使用者
4,標頭檔案
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include <conio.h>
#include<windows.h>//標頭檔案ok!
前言
肝這個系統很久了,(也因此寫出了我的第一篇CSDN)
這是我做的第一個較大的系統,U1S1,淚目
一個人肝了快1200多行,
共1490行,
共實現了33個函式功能,
包括連結串列新建,刪除,檔案的儲存,刪除,清空,查詢,修改等等
(初心:用最少的程式碼幹最多的事)
今天它終於成年了,
從嬰兒到青年,到少年。
挺不容易的,學到了很多C的知識。
也體會到,優化是無止境的,想法在老腦子裡
但是,應該不會再優化它了,事太多了,挺捨不得的,做了這麼久了,把他當兒子,自己像個老父親,雖然它經常出bug,熬夜禿頭多次,一次次優化,長大成人,很奇妙的感覺,成就感有,也有一絲絲傷感與解脫,不再為它熬夜了。還有考試,大創前端,陪你到這兒,不拖了!
作業要求
二,選單
1,選單展示
void Menu() {
printf("*************************************************\n");
printf("*\t歡迎使用活力長者社群系統\t\t*\n");
printf("*\t\t請選擇功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.會員管理\t\t\t*\n");//ok
printf("*\t\t2.房屋管理\t\t\t*\n");//ok
printf("*\t\t3.入住管理\t\t\t*\n");
printf("*\t\t4.娛樂設施管理\t\t\t*\n");
printf("*\t\t5.使用者管理\t\t\t*\n");
printf("*\t\t6.檔案管理\t\t\t*\n");//ok
printf("*\t\t0.退出系統\t\t\t*\n");//ok
printf("*************************************************\n");
}
2,列印選單
//列印選單
Menu();
//讀取一個字元 整數,字元在記憶體中對映為ASCII碼
char ch = getchar();
三,會員管理
1,會員管理選單
用printf列印,再用while迴圈,switch選擇,break退出
void MemberManagement() {
system("cls");
while (1) {
system("cls");
printf("*************************************************\n");
printf("*\t歡迎使用會員管理功能\t\t\t*\n");
printf("*\t\t請選擇功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.新建會員\t\t\t*\n");//ok
printf("*\t\t2.查詢會員\t\t\t*\n");//ok
printf("*\t\t3.修改會員\t\t\t*\n");
printf("*\t\t4.刪除會員\t\t\t*\n");
printf("*\t\t0.返回 \t\t\t*\n");//ok
printf("*************************************************\n");
char b = _getch();
if (b == '0')//輸入0.退出迴圈
break;
switch (b)
{
case '1':
MemberNew();//新建會員
break;
case '2':
MemberSeek();//查詢會員
break;
case '3':
MemberChange();//修改會員
break;
case '4':
MemberDelete();//刪除會員
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("cls");
}
2,新建會員
1, 運用了連結串列新建,使用while,使可以達到多次輸入,自己選擇退出的目標
2,注意head2為全域性頭節點,方便後面使用,把連結串列儲存在檔案中
3,創新思想:這裡關於房屋選擇,我的辦法是我把房屋資訊列印出來,再由會員自己選擇房屋(手動輸入名稱)
4,會員資訊:姓名,手機號碼,所選房屋
void MemberNew() {
int flag = 2;
//判斷頭節點是否為空,並找到尾節點
while (head2 != NULL && end2->next != NULL)
{
end2 = end2->next;
}
//列印房屋檔案
Fangwufile();
while (flag != 1)//判斷是否退出迴圈
{ //建立一個會員,在堆中分配記憶體
struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));
//判斷頭節點是否為空
if (head2 == NULL) {
head2 = node;
end2 = head2;
}
//錄入會員資訊
memset(node, 0, sizeof(struct Entity));//
printf("請輸入新建會員的名字\n");
memset(node->name, '0', sizeof(node->name));
scanf("%s", node->name);
printf("請輸入新建會員的手機號碼\n");
scanf_s("%lld", &node->number);//&指標得到值
printf("請輸入新建會員選擇的房型\n");
scanf("%s", node->work);
puts("恭喜房屋購買成功");
printf("是否需要繼續輸入?否(1),是(2)\n");
scanf("%d", &flag);
end2->next = node;
end2 = node;
node->next = NULL;
}
system("cls");
puts("請記得儲存會員資訊!");
system("pause");
system("cls");
}
3,查詢會員
1,這裡實現的是在檔案中查詢資料( 並不是連結串列 ),並列印出來
2,使用的是fscanf,fscanf返回值為得到的引數個數
3, 注意fscanf的使用是把資料儲存在快取中
4,實現在檔案中查詢int(整型資料)
void MemberSeek()
{ //檔案指標
FILE* fp;
if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
{
printf("開啟會員資訊.txt檔案失敗\n");
return;
}
else
{ //查詢的會員號碼(11位),所以用long long
long long int m;
printf("輸入會員的電話號碼:");
scanf("%lld", &m);
//在堆中分配記憶體
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
while (1)
{
int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
//逐個比較尋找
if (3 == nRead && q->number == m)
{
puts("*購買人\t*電話號碼\t*所購買的房型\t*");
printf("*%s\t*%lld\t*%s\n", q->name, q->number, q->work);
free(q);
break;
}
//判斷是否到結尾也沒有找到
else if (nRead != 3)
{
puts("對不起查詢不到會員資訊");
break;
}
}
}
fclose(fp);//關閉檔案
system("pause");
system("cls");
}
4,修改會員
功能: 實現在檔案中修改已儲存的資料
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void MemberChange() {
FILE* fp;
FILE* fp1;
long long int c = 0;
fp = fopen(".\\會員資訊.txt", "r+");
fp1 = fopen(".\\linshi.txt", "w+");//新建一個臨時檔案
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要修改會員的電話號碼");
scanf("%lld", &p->number);
while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
{
if (p->number != p1->number)//不是要修改的內容
{
fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
}
else
{ //重新錄入會員資料
puts("請輸入會員的姓名");
scanf("%s", p1->name);
puts("請輸入會員的電話號碼");
scanf("%lld", &p1->number);
puts("請輸入會員所購買的房型");
scanf("%s", p1->work);
fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
}
}
free(p);
free(p1);
fclose(fp);
fclose(fp1);
remove(".\\會員資訊.txt");//移除原檔案
rename("linshi.txt", ".\\會員資訊.txt");//把linshi檔案重新命名為原檔名
}
5,刪除會員
功能:實現在檔案中對會員資料進行查詢並刪除
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void MemberDelete() {
FILE* fp;
FILE* fp1;
fp = fopen(".\\會員資訊.txt", "r+");
fp1 = fopen(".\\linshi.txt", "w+");//新建一個臨時檔案
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要刪除會員的電話號碼");
scanf("%lld", &p->number);
while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
{
if (p->number != p1->number)//不是要刪除的內容
{
fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
}
}
puts("恭喜您刪除成功");
free(p);
free(p1);
fclose(fp);
fclose(fp1);
remove(".\\會員資訊.txt");
rename("linshi.txt", ".\\會員資訊.txt");
}
四,房屋管理
1,房屋選單
清屏,while,switch
void HouseManagement()
{
system("cls");
while (1) {
printf("*************************************************\n");
printf("*\t歡迎使用房屋管理功能\t\t\t*\n");
printf("*\t\t請選擇功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.新建房屋\t\t\t*\n");
printf("*\t\t2.修改房屋資訊\t\t\t*\n");
printf("*\t\t3.刪除房屋資訊\t\t\t*\n");
printf("*\t\t4.查詢房屋購買資訊\t\t*\n");
printf("*\t\t0.返回 \t\t\t*\n");
printf("*************************************************\n");
char b = _getch();
if (b == '0')
break;
switch (b)
{
case '1':
HouseNew();
break;
case '2':
HouseChange();
break;
case '3':
HouseDelete();
break;
case '4':
Huiyuanfile();
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("cls");
}
1,新建房屋
通過連結串列來新建,新建完後需要儲存資料!
房屋資訊:房屋型別,面積(m^2)
void HouseNew()
{
int flag = 2;
while (head1 != NULL && end1->next != NULL)
{
end1 = end1->next;
}
while (flag != 1)
{
struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));
if (head1 == NULL) {
head1 = node;
end1 = head1;
}
memset(node, 0, sizeof(struct Entity));
printf("請輸入新建房屋的型別(商品房等)\n");
scanf("%s", node->name);
printf("請輸入新建房屋的面積(m^2)\n");
scanf_s("%lld", &node->number);//&指標得到值
printf("是否需要繼續輸入?否(1),是(2)\n");
scanf("%d", &flag);
end1->next = node;
end1 = node;
node->next = NULL;
}
system("pause");
system("cls");
}
2,修改房屋資訊
實現在檔案中查詢字串
關鍵函式:strcmp
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void HouseChange(){
FILE* fp;
FILE* fp1;
fp = fopen(".\\房屋資訊.txt", "r+");
fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要修改房屋的名稱");
scanf("%s", p->name);
while (fscanf(fp, "%s %lld", p1->name, &p1->number) != EOF)//從原檔案讀一個結點
{
int abc = strcmp(p->name, p1->name);
if (abc != 0)//不是要改變的內容
{
fprintf(fp1, "%s %lld\n", p1->name, p1->number);
}
else
{
puts("請輸入新修改房屋的名稱");
scanf("%s", p1->name);
puts("請輸入新修改的房屋的面積");
scanf("%lld", &p1->number);
fprintf(fp1, "%s %lld\n", p1->name, p1->number);
}
}
free(p);
free(p1);
fclose(fp);
fclose(fp1);
remove(".\\房屋資訊.txt");
rename("linshi.txt", ".\\房屋資訊.txt");
system("cls");
puts("恭喜您修改成功");
system("pause");
system("cls");
}
3,刪除房屋資訊
實現在檔案中查詢字串
關鍵函式:strcmp
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void HouseDelete(){
FILE* fp;
FILE* fp1;
fp = fopen(".\\房屋資訊.txt", "r+");
fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要刪除房屋的名稱");
scanf("%s", p->name);
while (fscanf(fp, "%s %lld", p1->name, &p1->number) != EOF)//從原檔案讀一個結點
{
int abc = strcmp(p->name, p1->name);
if (abc != 0)//不是要改變的內容
{
fprintf(fp1, "%s %lld\n", p1->name, p1->number);
}
}
free(p);
free(p1);
fclose(fp);
fclose(fp1);
remove(".\\會員資訊.txt");
rename("linshi.txt", ".\\會員資訊.txt");
system("cls");
puts("恭喜您刪除成功");
system("pause");
system("cls");
}
4,查詢房屋資訊
房屋資訊即會員購買資訊,那麼我們這裡就可以直接引用會員資訊列印函式
//會員資訊列印
void Huiyuanfile()
{
system("cls");
FILE* fp;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
{
printf("開啟會員資訊.txt檔案失敗\n");
return;
}
else
{
puts("**********************************");
puts("*購買人\t\t*電話號碼\t*所購買的房型\t*");
while (1)
{
int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
if (3 == nRead)
{
printf("*%-10s\t*%-lld\t*%-10s\n", q->name, q->number, q->work);
p->next = q;
p = q;
}
else
{
free(q);
break;
}
}
puts("**********************************");
}
p->next = NULL;
fclose(fp);
system("pause");
system("cls");
}
== 五,入住管理==
1,入住管理選單
while迴圈,使用system(“cls”)清屏
//選單
void PersonManagement()
{
system("cls");
while (1)
{
system("cls");
puts("***********************************************");
puts("*\t歡迎使用入住管理功能\t *");
puts("*\t\t\t *");
puts("*\t1.會員入住處理 \t\t\t*");
puts("*\t2.入住資訊查詢 \t\t\t*");
puts("*\t0.返回 \t\t\t\t*");
puts("***********************************************");
char b = _getche();
if (b == '0')
break;
switch (b)
{
case '1':
Person();
break;
case '2':
Personfile();
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("cls");
}
2,會員入住管理
1,從會員資訊.txt中讀取資料,找到會員
2,把找到的會員資料輸入入住資訊。txt中,並加入一個數字(1or2or3),方便後面列印入住資訊時使用,也方便會員錄入
3,if判斷入住還是申請設施使用
4,Sleep(毫秒數)為Windo.h標頭檔案包含
//會員入住處理
void Person()
{
system("cls");
FILE* fp;
FILE* fp1;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp1 = fopen(".\\入住資訊.txt", "a+")) == NULL)
{
printf("開啟入住資訊.txt檔案失敗,請聯絡管理人員處理\n");
system("pause");
return;
}
if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
{
printf("開啟會員資訊.txt檔案失敗\n");
system("pause");
return;
}
else
{
long long int m;
puts("********************************************************");
printf("輸入入住的會員的電話號碼:");
scanf("%lld", &m);
puts("*購買人 \t*電話號碼\t*所購買的房型*\t");
while (1)
{
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
if (3 == nRead && q->number == m)
{
fprintf(fp1, "%s %11d %s", q->name, q->number, q->work);
printf("*%-10s\t*%-lld\t*%-10s\t\n", q->name, q->number, q->work);
puts("*入住輸入1,申請設施輸入2");//選擇功能
int b = 0;
scanf("%d", &b);
if (b == 1) //入住
puts("*請輸入:""1(入住)""or""2(出租)""or3(空置)""");
scanf_s("%d", &q->message);
fprintf(fp1, " %d\n", q->message);
if (q->message == 1)
{
system("cls");
puts("恭喜入住成功!");
}
else if (q->message == 2)
{
system("cls");
puts("恭喜出租成功");
}
else
{
system("cls");
puts("恭喜空置成功");
}
free(q);
break;
}
else//申請設施
{
system("cls");
Sheshifile();//列印已有的設施
AmusementSeek();//搜尋需要使用的設施
puts("設施使用完畢");
Sleep(4000);//螢幕暫停4s
free(q);
break;
}
}
else
{
if (!feof(fp))
{
p->next = q;
p = q;
}
else
{
puts("抱歉,該會員未購買房屋,我們這兒不允許白嫖");//手動狗頭
break;
}
}
}
p->next = NULL;
fclose(fp);
system("pause");
system("cls");
}
}
}
3,入住資訊查詢
while遍歷
創新點:用strcpy函式實現把之前的數字(1,2,3)變成(入住,出租,閒置)
//列印入住會員的資訊
void Personfile() {
system("cls");
FILE* fp;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\入住資訊.txt", "r")) == NULL)
{
printf("開啟入住資訊.txt檔案失敗\n");
return;
}
else
{
puts("******************************************************");
printf("*購買人\t*電話號碼\t*所購買的房型\t");
printf("*入住資訊\t*\n");
while (1)
{
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));//在堆中分配空間
int nRead = fscanf(fp, "%s %lld %s %d", q->name, &q->number, q->work, &q->message);//nRead等於要輸出引數的個數
if (4 == nRead)
{
char b[20] = "\0";
if (q->message == 1)
strcpy(b, "入住");
else if (q->message == 2)
strcpy(b, "出租");
else strcpy(b, "閒置");
printf("*%-10s\t*%-lld\t*%-10s\t*%-10s\n", q->name, q->number, q->work, b);
p->next = q;
p = q;
}
else
{
free(q);
break;
}
}
}
p->next = NULL;
fclose(fp);
system("pause");
system("cls");
}
六,娛樂設施管理
1,娛樂設施管理選單
while
創新點:用了_getch,好處不用按enter,直接就能繼續執行
void AmusementManagement()
{
system("cls");
while (1) {
printf("*************************************************\n");
printf("*\t歡迎使用設施管理功能\t\t\t*\n");
printf("*\t\t請選擇功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.新建設施資訊\t\t\t*\n");//ok
printf("*\t\t2.修改設施資訊\t\t\t*\n");//ok
printf("*\t\t3.刪除設施資訊 \t\t*\n");//ok
printf("*\t\t0.返回 \t\t\t*\n");//ok
printf("*************************************************\n");
char b = _getch();
if (b == '0') break;
switch (b)
{
case '1':
AmusementNew();
break;
case '2':
AmusementChange();
break;
case '3':
AmusementDelete();
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("pause");
system("cls");
}
2,新建娛樂設施
while循還,用一個判斷來決定是否輸入,更加人性化
設施資訊:名稱,可使用人數
void AmusementNew() {
system("cls");
int flag = 2;
while (head3 != NULL && end3->next != NULL)
{
end3 = end3->next;
}
puts("***************************************");
while (flag != 1)//判斷是否繼續,很常用的一個程式碼思想
{
struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));
if (head3 == NULL) {//判斷是否頭節點為空
head3 = node;
end3 = head3;
}
memset(node, 0, sizeof(struct Entity));//清空結構體
//錄入資料
printf("*\t請輸入新建設施的名稱:\t\t*\n");
scanf("%s", node->name);
printf("*\t請輸入設施可以使用的人數: \t\n");
scanf_s("%lld", &node->number);//&指標得到值
printf("*\t是否需要繼續輸入?否(1),是(2)\t*\n");
scanf("%d", &flag);
end3->next = node;
end3 = node;
node->next = NULL;//最後尾節點指向空(NULL)
}
system("cls");
puts("請記得儲存設施資訊!");
system("pause");
system("cls");
}
3,搜尋娛樂設施資訊
此函式作用:在申請娛樂設施時的選擇設施(也就是查詢)
得不到資料,debug了很久。。。。解決後,獎勵一杯快樂水
//搜尋seek
void AmusementSeek()
{
FILE* fp;
struct Entity* p2 = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\娛樂設施資訊.txt", "r")) == NULL)
{
printf("開啟娛樂設施資訊.txt檔案失敗\n");
return;
}
else
{
printf("請輸入娛樂設施的名稱:");
scanf("%s", p2->name);
while (1)
{
int nRead = fscanf(fp, "%s %lld", q->name, &q->number);//nRead等於要輸出引數的個數
int abc = strcmp(p2->name, q->name)//相同返回為0
printf("%d", abc);
if (2 == nRead && abc==0)
{
puts("*娛樂設施名稱\t*可使用人數\t*");
printf("*%-10s\t*%-lld\t\n", q->name, q->number);
free(q);//釋放空間
break;
}
else if (nRead != 2)
{
puts("對不起沒用此娛樂設施資訊");
break;
}
}
}
fclose(fp);
system("pause");
}
4,修改娛樂設施資訊
實現 :在檔案中找到資料,並進行資料修改,並不改變其他資料!
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void AmusementChange()
{
FILE* fp2;
FILE* fp3;
long long int c = 0;
fp2 = fopen(".\\娛樂設施資訊.txt", "r+");
fp3 = fopen(".\\linshi2.txt", "w+");//新建一個臨時檔案
struct Entity* p2 = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p3 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要修改設施的名稱");
scanf("%s", &p2->name);
while (fscanf(fp2, "%s %lld", p3->name, &p3->number) != EOF)//從原檔案讀一個結點
{
int abc = strcmp(p2->name, p3->name);
if (abc != 0)//不是要改變的內容
{
fprintf(fp3, "%s %lld\n", p3->name, p3->number);
}
else
{
puts("請輸入新修改的設施的名稱");
scanf("%s", p3->name);
puts("請輸入新修改的設施可以使用的人數");
scanf("%lld", &p3->number);
fprintf(fp3, "%s %lld \n", p3->name, p3->number);
}
}
free(p2);
free(p3);
fclose(fp2);
fclose(fp3);
remove(".\\娛樂設施資訊.txt");
rename("linshi2.txt", ".\\娛樂設施資訊.txt");
system("cls");
puts("恭喜您修改成功");
system("pause");
system("cls");
}
5,刪除設施資訊
通過一個while循還遍歷,和if來判斷是否是需要刪除的資料
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void AmusementDelete() {
FILE* fp4;
FILE* fp5;
fp4 = fopen(".\\娛樂設施資訊.txt", "r+");
fp5 = fopen(".\\linshi.txt", "w+");//新建一個臨時檔案
struct Entity* p4 = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p5 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要刪除設施的名稱");
scanf("%s", &p4->name);
while (fscanf(fp4, "%s %lld", p5->name, &p5->number) != EOF)//從原檔案讀一個結點
{
int abc = strcmp(p4->name,p5->name);
if (abc != 0)//不是要刪除的內容
{
fprintf(fp5, "%s %lld\n", p5->name, p5->number);
}
}
free(p4);
free(p5);
fclose(fp4);
fclose(fp5);
remove(".\\娛樂設施資訊.txt");
rename("linshi.txt", ".\\娛樂設施資訊.txt");
system("cls");
puts("恭喜您刪除成功");
system("pause");
system("cls");
}
七,使用者管理
ps:這個功能函式的檔案儲存存在延遲,有時需要退出系統後,檔案資料才會儲存到檔案中
執行時,可能不會看到檔案的實時變化
1,使用者管理選單
清屏,while,_getche()
void UserManagement() {
system("cls");
while (1) {
printf("*************************************************\n");
printf("*\t歡迎使用使用者管理功能\t\t\t*\n");
printf("*\t \t\t\t*\n");
printf("*\t\t請選擇功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.新建使用者\t\t\t*\n");//ok
printf("*\t\t2.查詢使用者\t\t\t*\n");//ok
printf("*\t\t3.修改使用者\t\t\t*\n");
printf("*\t\t4.刪除使用者\t\t\t*\n");
printf("*\t\t5.設定服務物件\t\t\t*\n");
printf("*\t\t6.查詢服務物件\t\t\t*\n");
printf("*\t\t0.返回 \t\t\t*\n");//ok
printf("*************************************************\n");
char b = _getche();
if (b == '0')
break;
switch (b)
{
case '1':
UserNew();
break;
case '2':
UserSeek();
break;
case '3':
UserChange();
break;
case '4':
UserDelete();
break;
case '5':
UserPerson();
break;
case '6':
PersonUserfile();
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("cls");
}
2,新建使用者
通過連結串列建立新的節點,記得儲存到檔案中
使用者資訊:名字,職務,電話號碼
void UserNew() {
int flag = 2;
while (head4 != NULL && end4->next != NULL)
{
end4 = end4->next;
}
while (flag != 1)
{
struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));
if (head4 == NULL)
{
head4 = node;
end4 = head4;
}
memset(node, 0, sizeof(struct Entity));
printf("*\t請輸入服務人員的名字\t*\n");
memset(node->name, '0', sizeof(node->name));
scanf("%s", node->name);
printf("*\t請輸入其職務\t*\n");
scanf("%s", node->work);
printf("*\t請輸入其的手機號碼\t*\n");
scanf_s("%lld", &node->number);//&指標得到值
printf("是否需要繼續輸入?否(1),是(2)\n");
scanf("%d", &flag);
end4->next = node;
end4 = node;
node->next = NULL;
}
system("cls");
puts("請記得儲存使用者資訊!");
system("pause");
system("cls");
}
3,查詢使用者
通過電話號碼查詢
void UserSeek() {
FILE* fp1;
long long int n;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp1 = fopen(".\\使用者資訊.txt", "r")) == NULL)
{
printf("開啟使用者資訊.txt檔案失敗\n");
return;
}
puts("輸入服務人員電話號碼");
scanf("%lld", &n);
while (1)
{
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
int nRead = fscanf(fp1, "%s %lld %s ", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
if (3 == nRead && q->number == n)
{
puts("********************************");
puts("*姓名\t\t*職務\t\t*電話號碼*");
printf("*%-10s\t*%-10s\t*%-lld\n", q->name, q->work, q->number);
puts("********************************");
free(q);
break;
}
else
{
p->next = q;
p = q;
}
}
p->next = NULL;
fclose(fp1);
system("pause");
system("cls");
}
4,修改使用者
通過電話號碼找到資料,再對其進行重新輸入
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void UserChange()
{
FILE* fp;
FILE* fp1;
long long int c = 0;
fp = fopen(".\\使用者資訊.txt", "r+");
fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要修改使用者的電話號碼");
scanf("%lld", &p->number);
while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
{
if (p->number != p1->number)//不是要刪除的內容
{
fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
}
else
{
puts("請輸入使用者的姓名");
scanf("%s", p1->name);
puts("請輸入使用者的電話號碼");
scanf("%lld", &p1->number);
puts("請輸入使用者的職務");
scanf("%s", p1->work);
fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
}
}
free(p);
free(p1);
fclose(fp);
fclose(fp1);
remove(".\\使用者資訊.txt");
rename("linshi.txt", ".\\使用者資訊.txt");
puts("恭喜您修改成功");
system("pause");
system("cls");
}
5, 刪除使用者資料
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!
void UserDelete()
{
FILE* fp;
FILE* fp1;
fp = fopen(".\\使用者資訊.txt", "r+");
fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
puts("請輸入你要刪除使用者的電話號碼");
scanf("%lld", &p->number);
while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
{
if (p->number != p1->number)//不是要刪除的內容
{
fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
}
}
free(p);
free(p1);
fclose(fp);
fclose(fp1);
remove(".\\使用者資訊.txt");
rename("linshi.txt", ".\\使用者資訊.txt");
puts("恭喜您刪除成功");
system("pause");
system("cls");
}
6,設定服務物件
2個檔案,一個使用者資訊.txt,一個服務物件資訊
void UserPerson(){
system("cls");
long long int n;
FILE* fp1;
FILE* fp2;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp1 = fopen(".\\使用者資訊.txt", "r")) == NULL)
{
printf("開啟使用者資訊.txt檔案失敗\n");
return;
}
if ((fp2 = fopen(".\\服務物件資訊.txt", "a+")) == NULL)
{
printf("開啟服務人員資訊.txt檔案失敗\n");
return;
}
puts(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
puts("*輸入服務人員電話號碼");//設定服務人員
scanf("%lld", &n);
while (1)
{
int nRead = fscanf(fp1, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
if (3 == nRead && q->number == n)//找到服務物件
{
puts("********************************");
puts("*姓名\t*職務\t*電話號碼*");
printf("*%-10s\t*%-10s\t*%-lld\n", q->name, q->work, q->number);
puts("********************************");
puts("輸入服務的物件的名字");//服務的物件
scanf("%s", q->name1);
fprintf(fp2, "%s %s %lld %s\n", q->name, q->work,q->number,q->name1);
puts("服務成功");
free(q);
break;
}
else
{
p->next = q;
p = q;
}
if (nRead != 3)
printf("沒有這個號碼的服務人員");
}
p->next = NULL;
fclose(fp1);
system("pause");
system("cls");
}
7,查詢服務物件
八,檔案管理
1,檔案管理選單
檔案包括:檔案儲存,檔案資料查詢,清空檔案資料
void FileMenu()
{
system("cls");
while (1) {
system("cls");
printf("*************************************************\n");
printf("*\t歡迎使用檔案管理功能\t\t\t*\n");
printf("*\t\t請選擇功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.檔案儲存\t\t\t*\n");
printf("*\t\t2.檔案資料查詢\t\t\t*\n");
printf("*\t\t3.檔案資料清空\t\t\t*\n");
printf("*\t\t0.返回\t\t\t\t*\n");
printf("*************************************************\n");
char b = _getch();
if (b == '0')
break;
switch (b)
{
case '1':
Savefile();
break;
case '2':
Filesercher();
break;
case '3':
flash();
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("cls");
}
2,檔案資料儲存
可以儲存:會員,房屋,娛樂設施,使用者資料
ps:因為新建時是用的連結串列,所以必須要儲存
創新(取巧):這裡用了個switch,再用strcpy,給filename賦值,再進行操作
void Savefile() {
system("cls");
//開啟檔案
while (1)
{
system("cls");
FILE* pFile;
printf("************************************************\n");
printf("*\t\t請輸入您想儲存那個文字資料\t*\n");
printf("*\t\t輸入1,儲存會員資料\t\t*\n*\t\t輸入2,儲存房屋資料\t\t*\n");
printf("*\t\t輸入3,儲存娛樂設施資料\t\t*\n*\t\t輸入4,儲存使用者資料\t\t*\n");
printf("*\t\t輸入0,返回\t\t\t*\n");
printf("*************************************************\n");
char ch2 = _getch();
if (ch2 == '0')
break;
struct Entity* p1 = NULL;
char filename[30] = { "0" };
switch (ch2)
{
case '1':
strcpy(filename, ".\\會員資訊.txt");
p1 = head2;
break;
case '2':
strcpy(filename, ".\\房屋資訊.txt");
p1 = head1;
break;
case '3':
strcpy(filename, ".\\娛樂設施資訊.txt");
p1 = head3;
break;
case '4':
strcpy(filename, ".\\使用者資訊.txt");
p1 = head4;
break;
case'\n':
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
if (filename == ".\\使用者資訊.txt")
{
pFile = fopen(filename, "a+");
//檔案地址要改
fseek(pFile, 0, SEEK_END);
if (pFile == NULL) {
printf("開啟檔案失敗。\n");
return;
}
else {//寫入資料
struct Entity* p = p1;
while (p != NULL)
{
fprintf(pFile, "%s %s %lld\n", p->name,p->number,p->work);
p = p->next;
}
//關閉檔案
fclose(pFile);
printf("%s資料儲存成功。\n", filename);
system("pause");
system("cls");
}
}
else if (filename == ".\\會員資訊.txt")
{
pFile = fopen(filename, "a+");
//檔案地址要改
fseek(pFile, 0, SEEK_END);//末尾
if (pFile == NULL) {
printf("開啟檔案失敗。\n");
return;
}
else {//寫入資料
struct Entity* p = p1;
while (p != NULL)
{
fprintf(pFile, "%s %lld %s \n", p->name, p->number, p->work);
p = p->next;
}
//關閉檔案
fclose(pFile);
printf("%s資料儲存成功。\n", filename);
system("pause");
system("cls");
}
}
else if (filename == ".\\入住資訊.txt")
{
pFile = fopen(filename, "a+");
//檔案地址要改
fseek(pFile, 0, SEEK_END);//末尾
if (pFile == NULL) {
printf("開啟檔案失敗。\n");
return;
}
else {//寫入資料
struct Entity* p = p1;
while (p != NULL)
{
fprintf(pFile,"%s %lld %s %d\n", p->name, p->number, p->work, p->message);
p = p->next;
}
//關閉檔案
fclose(pFile);
printf("%s資料儲存成功。\n", filename);
system("pause");
system("cls");
}
}
else
{
pFile = fopen(filename, "a+");
//檔案地址要改
fseek(pFile, 0, SEEK_END);
if (pFile == NULL) {
printf("開啟檔案失敗。\n");
return;
}
else {//寫入資料
struct Entity* p = p1;
while (p != NULL)
{
fprintf(pFile, "%s %lld %s \n", p->name, p->number, p->work);
p = p->next;
}
//關閉檔案
fclose(pFile);
printf("%s資料儲存成功。\n", filename);
system("pause");
system("cls");
}
}
}
system("cls");
}
3,檔案資料查詢
@1,檔案查詢選單
可以查詢(列印)會員,房屋,娛樂設施,使用者人員,服務物件資訊
既是查詢,有是列印
void Filesercher() {
system("cls");
while (1) {
system("cls");
puts("******************************");
puts("*\t輸入1查詢會員資訊 *\t");
puts("*\t輸入2查詢房屋資訊 *\t");
puts("*\t輸入3查詢娛樂設施資訊*\t");
puts("*\t輸入4查詢使用者人員資訊*\t");
puts("*\t輸入5查詢入住資訊 *\t");
puts("*\t輸入6查詢服務物件資訊*\t");
puts("*\t輸入0退出 *\t");
puts("******************************");
char b = _getch();
if (b == '0')
break;
switch (b)
{
case '1':
Huiyuanfile();
break;
case '2':
Fangwufile();
break;
case '3':
Sheshifile();
break;
case '4':
Userfile();
break;
case '5':
Personfile();
break;
case '6':
PersonUserfile();
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
}
system("cls");
}
@2,房屋檔案查詢
void Fangwufile()
{
system("cls");
FILE* fp;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\房屋資訊.txt", "r")) == NULL)
{
printf("開啟房屋資訊.txt檔案失敗\n");
return;
}
else
{
puts("**********************************");
puts("*房屋型別\t\t*面積(m^2)");
while (1)
{
int nRead = fscanf(fp, "%s %lld", q->name, &q->number);//nRead等於要輸出引數的個數
if (2 == nRead)//判斷是否到了結尾
{
printf("*%-10s\t\t*%-lld*\n", q->name, q->number);
p->next = q;
p = q;
puts("**********************************");
}
else
{
free(q);
break;
}
}
}
p->next = NULL;
fclose(fp);
system("pause");
}
@3,會員檔案查詢
void Huiyuanfile()
{
system("cls");
FILE* fp;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
{
printf("開啟會員資訊.txt檔案失敗\n");
return;
}
else
{
puts("**********************************");
puts("*購買人\t\t*電話號碼\t*所購買的房型\t*");
while (1)
{
int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
if (3 == nRead)
{
printf("*%-10s\t*%-lld\t*%-10s\n", q->name, q->number, q->work);
p->next = q;
p = q;
}
else
{
free(q);
break;
}
}
puts("**********************************");
}
p->next = NULL;
fclose(fp);
system("pause");
system("cls");
}
@4,設施檔案查詢
void Sheshifile()
{
FILE* fp;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\娛樂設施資訊.txt", "r")) == NULL)
{
printf("開啟娛樂設施資訊.txt檔案失敗\n");
return;
}
else
{
puts("*娛樂設施的名稱\t*可以使用的人數");
while (1)
{
int nRead = fscanf(fp, "%s %lld\n", q->name, &q->number);//nRead等於要輸出引數的個數
if (2 == nRead)
{
printf("*%-10s\t*%-lld\t\n", q->name, q->number);
p->next = q;
p = q;
}
else
{
free(q);
break;
}
}
}
p->next = NULL;
fclose(fp);
system("pause");
}
@5,使用者檔案查詢
void Userfile()
{
system("cls");
FILE* fp1;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp1 = fopen(".\\使用者資訊.txt", "r")) == NULL)
{
printf("開啟使用者資訊.txt檔案失敗\n");
return;
}
puts("********************************");
puts("*姓名 \t*職務\t\t*電話號碼*");
while (1)
{
int nRead = fscanf(fp1, "%s %lld %s", q->name, &q->number,q->work);//nRead等於要輸出引數的個數
if (3 == nRead)
{
printf("*%-10s\t*%-10s\t*%-lld\n", q->name, q->work, q->number);
p->next = q;
p = q;
puts("********************************");
}
else
{
free(q);
break;
}
}
p->next = NULL;
fclose(fp1);
system("pause");
}
@6,入住檔案查詢
void Personfile() {
system("cls");
FILE* fp;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp = fopen(".\\入住資訊.txt", "r")) == NULL)
{
printf("開啟入住資訊.txt檔案失敗\n");
return;
}
else
{
puts("******************************************************");
printf("*購買人\t\t*電話號碼\t*所購買的房型\t");
printf("*入住資訊\t\n");
while (1)
{
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
int nRead = fscanf(fp, "%s %lld %s %d\n", q->name, &q->number, q->work, &q->message);//nRead等於要輸出引數的個數
if (4 == nRead)
{
char b[20] = "\0";
if (q->message == 1)
strcpy(b, "入住");
else if (q->message == 2)
strcpy(b, "出租");
else strcpy(b, "閒置");
printf("*%-10s\t*%-lld\t*%-10s\t*%-10s\n", q->name, q->number, q->work, b);
p->next = q;
p = q;
}
else
{
free(q);
break;
}
}
}
p->next = NULL;
fclose(fp);
system("pause");
system("cls");
}
@7,服務物件檔案查詢
void PersonUserfile(){
system("cls");
FILE* fp1;
struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
if ((fp1 = fopen(".\\服務物件資訊.txt", "r")) == NULL)
{
printf("開啟服務物件資訊.txt檔案失敗\n");
return;
}
puts("********************************");
puts("*姓名 \t*職務\t\t*電話號碼\t*服務物件");
while (1)
{
int nRead = fscanf(fp1, "%s %s %lld %s\n", q->name, q->work, &q->number,q->name1);//nRead等於要輸出引數的個數
if (4 == nRead)
{
printf("*%-10s\t*%-10s\t*%-lld\t*%-10s\n", q->name, q->work, q->number,q->name1);
p->next = q;
p = q;
puts("********************************");
}
else
{
break;
}
}
p->next = NULL;
free(q);
fclose(fp1);
system("pause");
system("cls");
}
4,檔案資料清空
可以清空:會員,房屋,服務物件,娛樂設施,使用者,入住資訊
思想:switch,再用strcpy給filename賦值
重點:檔案開啟方式為w+,再直接關閉即可!!!
void flash() {
system("cls");
//開啟檔案
FILE* pFile;
puts("***********************************");
printf("*請輸入您想儲存哪個清空資料\n");
printf("*輸入1,清空會員資料\n*輸入2,清空房屋資料\n*輸入3,清空服務物件資訊\n");
printf("*輸入4,清空娛樂設施資料\n*輸入5,清空使用者資料\n輸入6,清空入住資訊\n");
puts("***********************************");
char ch2 = _getch();
char filename[30] = { "0" };
switch (ch2)
{
case '1':
strcpy(filename, ".\\會員資訊.txt");
break;
case '2':
strcpy(filename, ".\\房屋資訊.txt");
break;
case '3':
strcpy(filename, ".\\服務物件資訊.txt");
break;
case '4':
strcpy(filename, ".\\娛樂設施資訊.txt");
break;
case '5':
strcpy(filename, ".\\使用者資訊.txt");
break;
case '6':
strcpy(filename, ".\\入住資訊.txt");
break;
case'\n':
break;
default:
printf("輸入有誤,沒有該功能\n\n");
system("pause");
system("cls");
break;
}
FILE* fp = fopen(filename, "w+");
if (fp == NULL)
{
printf("檔案未被開啟\n");
}
else
{
fclose(fp);
printf("你已經清空%s\n", filename);
}
system("pause");
system("cls");
}
相關文章
- Apache Dubbo 社群召集 Rust 語言開發者ApacheRust
- C語言學生管理系統原始碼C語言原始碼
- C語言貪吃蛇原始碼C語言原始碼
- C++大作業二次開發C++
- 一些適合初學者的C/C++語言開發環境(IDE)C++開發環境IDE
- c語言初學者氣泡排序C語言排序
- DAO社群治理模式系統開發需求梳理及所使用原始碼語言(Python)實現示例模式原始碼Python
- C語言學習方法,怎麼學習C語言?C語言
- Go語言Context包原始碼學習GoContext原始碼
- PAT乙級1004 成績排名 (20分)(C語言版)及解析C語言
- go語言開發入門:GO 開發者對 GO 初學者的建議Go
- 從零開始學C語言pdfC語言
- c語言作業C語言
- C語言程式設計,初學者必學程式碼規範,你知道哪些?C語言程式設計
- 東北大學秦皇島分校通訊工程中外合作2020級C/CPP實驗8
- 使用C語言編寫貪食蛇程式原始碼C語言原始碼
- C語言從入門到精通光碟原始碼(清華大學出版社)原始碼下載C語言原始碼
- "工業革命"--我的多語言開發之路(內附神器)
- (原創) C語言初學者建議的書籍 (C/C++) (C)C語言C++
- C語言作業1。C語言
- C語言作業2C語言
- C++20語言核心特性的變化C++
- Linux核心C語言將升級LinuxC語言
- 重新學C語言2C語言
- C語言再學習C語言
- C語言學習心得C語言
- 【開發語言】PHP、Java、C語言的編譯執行過程PHPJavaC語言編譯
- 東郊到家小程式開發原始碼部署原始碼
- C語言:發工資C語言
- C語言初學者最常問的幾個問題C語言
- C語言初學者必須掌握的關鍵字!C語言
- 16個幫助開發者成長的技術社群
- 初學者學Python還是C語言?兩者之間有什麼不同?PythonC語言
- 20天學會go語言影片教程Go
- C語言:一種高效、易學的程式語言C語言
- C 語言程式碼總結
- 合約量化系統開發(Python語言)丨合約量化開發(原始碼專案)Python原始碼
- PHP語言技術開發的手術麻醉管理系統原始碼PHP原始碼