當前位置:首頁 » 編程語言 » c語言系統的維護
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言系統的維護

發布時間: 2023-05-31 08:22:56

c語言學生信息管理系統

#include "stdio.h"
#include "stdlib.h"
#include "string.h"搭陵拆
int shoudsave=0; /* */
struct student
{
char num[10];/* 學號 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新時間 */
};

typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;

void menu()
{
printf("********************************************************************************");
printf("\t1登記學生資料\t\t\t\t\t2刪除學生資料\n");
printf("\t3查詢學生資料\t\t\t\t\t4修改學生資料\n");
printf("\t5保存學生資料\t\t\t\t\t0退出系知棗統\n");
printf("********************************************************************************\n"汪雀);
}

void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:輸入錯誤!\n");
}

void Nofind()
{
printf("\n=====>提示:沒有找到該學生!\n");
}

void printc() /* 本函數用於輸出中文 */
{
printf(" 學號\t 姓名 性別 英語成績 數學成績 C語言成績 總分 平均分\n");
}

void printe(Node *p)/* 本函數用於輸出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數用於定位連表中符合要求的接點,並返回該指針 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按學號查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}

void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 將指針置於最末尾 */
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}

p=(Node *)malloc(sizeof(Node));

strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入c語言成績:");
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入數學成績:");
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入英語成績:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息輸入已經完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;

}
}

void Qur(Link l) /* 查詢學生 */
{
int sel;
char findmess[20];
Node *p;

if(!l->next)
{
printf("\n=====>提示:沒有資料可以查詢!\n");
return;

}
printf("\n=====>1按學號查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 學號 */
{
printf("請你輸入要查找的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 刪除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以刪除!\n");
return;
}
printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}

void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以修改!\n");
return;
}
printf("請你輸入要修改的學生學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學號(原來是%s):",p->data.num);
scanf("%s",p->data.num);
printf("請你輸入新姓名(原來是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別(原來是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("請你輸入新的c語言成績(原來是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入新的數學成績(原來是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:資料修改成功!\n");
shoudsave=1;
}
else
Nofind();

}

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:沒有資料可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用於指向分數最高的接點 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:沒有資料可以統計!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;

r=r->next;
}
printf("------------------------------統計結果--------------------------------\n");
printf("總分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);

printf("英語最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("數學最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c語言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:沒有資料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */
s->data=p->data;
s->next=NULL;

rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已經完成!\n");
}

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發生錯誤!\n");
exit(1);
}
p=l->next;

while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;
printf("\t\t\t\t學生成績管理系統\n\t\t\t\t-------福建農業職業學院計應0501 黃歡(32號)\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件還不存在,是否創建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已經打開,正在導入記錄......\n");

while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}

fclose(fp); /* 關閉文件 */
printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count);

while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已經退出系統,再見!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學生 */
case 2:Del(l);break;/* 刪除學生 */
case 3:Qur(l);break;/* 查詢學生 */
case 4:Modify(l);break;/* 修改學生 */
case 5:Save(l);break;/* 保存學生 */
case 9:printf("\t\t\t==========幫助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */

再給你個網站 你可能會需要他的http://topic.csdn.net/t/20061019/21/5095340.html

❷ 打開文件時文件系統要維護哪些信息a文件指針

打開文件時文件系統要維護哪些信息a文件指針。、初步理解打開文件
站在系統的角度,每個文件被打開的時候都會在內存中開辟一個文件信息區,用於存放文件的相關信息(如文件名、文件狀態以及文件當前的位置等)。

站在C 語言的角度,其實就是創建一個FILE類型的結構體變數,然後系統將文件的相關信息填入到這個結構體變數中。(文件的信息是OS自動填充的)

// 結構體的類型是OS已經聲明過的
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
一般情況下使用一旅稿梁個 FILE* 類型的拆運指針來維護這個結構體,讓用戶在操作文件時更加方便,這個指針就是緩沖文件系統中的關鍵概念 —— "文件指針"。

2、打開/關閉文件的函數
在C語言中我們可以使用 fopen 來打開一個文件,對應的,使用 fclose 來關閉文件。下面重點來了解fopen函敬鏈數。

(1) fopen函數
下面是fopen函數的聲明:

第一個參數 filename:文件所在路徑

第二個參數 mode:打開文件的方式。可選值見下表。

返回值:文件打開成功,則返迴文件對應的文件指針;打開失敗,返回

❸ c語言應用框架是什麼意思

應用框架的意思是為了實現某個業界標准或完成特定基本任務的軟體組件規范,也指為了實現某個軟體組件規范時,提供規范所要求之基礎功能的軟體產品。

框架的功能類似於基礎設施,與具體的軟體應用無關,但是提供並實現最為基礎的軟體架構和體系。軟體開發者通常依據特定的框架實現更為復雜的商業運用和業務邏輯。這樣的軟體應用可以在支持同一種框架的軟體系統中運行。


(3)c語言系統的維護擴展閱讀

軟體框架師需要有廣泛的軟體理論知識和相應的經驗來實施和管理軟體產品的高級設計。軟體框架師定義和設計軟體的模塊化,模塊雹或之間的交互,用戶界面風格,對外介面方法,創新的設計特性,以及高層事物的對象操作、邏輯和流程。

可靠性(Reliable:軟悔肆春件系統對於用戶的商業經營和管理來說極為重要,因此軟體系統必須非常可靠。

安全性(Secure):軟體系統所承擔的交易的商業價值極高,系統的安全性非常重要。

可伸縮性(SCAlable):軟體必須能夠在用戶的使用率、用戶的數目增加很快的情況下,保持合理的性能。只有這樣,才能適應用戶的市場擴展得可能性。

可定製碧耐化(CuSTomizable):同樣的一套軟體,可以根據客戶群的不同和市場需求的變化進行調整。

可擴展性(Extensible):在新技術出現的時候,一個軟體系統應當允許導入新技術,從而對現有系統進行功能和性能的擴展。

可維護性(MAIntainable):軟體系統的維護包括兩方面,一是排除現有的錯誤,二是將新的軟體需求反映到現有系統中去。一個易於維護的系統可以有效地降低技術支持的花費。

客戶體驗(Customer Experience):軟體系統必須易於使用。

市場時機(Time to Market):軟體用戶要面臨同業競爭,軟體提供商也要面臨同業競爭。以最快的速度爭奪市場先機非常重要。

❹ C語言客房管理系統,求大神

//inhead.h
#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#include"ctype.h"

#defineMaxRoom20

structguest_info

{

charname[8];

charfee[5];

charidnum[18];

chartime[14];

charouttime[14];

intnumber;

chartel[11];

intr;

}room[21];

voidLogin();

voidSearch();

voidChange();

voidout();

voidsave();

voidload();

//inlogin.c
#include"head.h"
voidLogin()
{
inti;
system("cls");
printf("請輸入客房號: ");
scanf("%d",&i);
if(room[i].r==1)
{
printf("對不起,該房間已入住");
return;
}
room[i].number=i;
room[i].r=1;
printf("請輸入客戶姓名、身份證號碼、聯系電話、入住時間、退房時間、費用: ");
scanf("%s%s%s%s%s%s",room[i].name,room[i].idnum,room[i].tel,room[i].time,room[i].outtime,room[i].fee);
save();
printf("恭喜,登記成功!! ");
}
voidsave()
{
inti;
FILE*fp;
if((fp=fopen("room.txt","wb"))==NULL)
{
printf("無法打開文件 ");
return;
}
for(i=0;i<MaxRoom;i++)
if(fwrite(&room[i],sizeof(structguest_info),1,fp)!=1)
printf("文件讀取錯誤 ");
printf("文件寫入完成 ");
fclose(fp);
}
voidload()
{
FILE*fp;
inti;
if((fp=fopen("room.txt","rb"))==NULL)
{
printf("不知春能打開文件 ");
return;
}
for(i=0;i<MaxRoom;i++)
if(fread(&room[i],sizeof(structguest_info),1,fp)!=1)
{
if(feof(fp))
{
fclose(fp);
return;
}
printf("文件讀取錯誤 ");
}
fclose(fp);
system("cls");
printf("文件讀取成功 ");
}
voidChange()
{
inti;
system("cls");
printf("請輸入房間號: ");
scanf("%d",&i);
if(room[i].number==i)
{
printf("請輸入退房日期: ");
scanf("%s",room[i].outtime);
printf("請輸入費用: ");
scanf("%s",room[i].fee);
system("cls");
printf("修改成功!! ");
}
else
{
system("cls");
printf("該房間為空房!! ");
}
}
voidout()
{
inti;
printf("請輸入房間號: ");
scanf("%d",&i);
if(room[i].number==i)
{
搭虛耐room[i]=room[21];
save();
system("cls");
printf("退房成功 "譽旁);
}
else
{
system("cls");
printf("該房間為空房 ");
}
}

voidSearch()
{
inti;
system("cls");
printf("請輸入要查詢的房間號碼: ");
scanf("%d",&i);
if(room[i].number==i)
{
printf("姓名:%s ",room[i].name);
printf("客房號:%d ",room[i].number);
printf("聯系電話:%s ",room[i].tel);
printf("入住時間:%s ",room[i].time);
printf("退房時間:%s ",room[i].outtime);
printf("費用:%s ",room[i].fee);
}
else
{
printf("很抱歉,沒有找到該身份證登記的相關信息!!");
}
}
voidFreeRoom()
{
intf;
for(f=0;f<20;f++)
{
if(room[f].r==0)
printf("%d號房為空房 ",f);
else
printf("%d號房已入住 ",f);
}
}

//inmain.c
#include"head.h"
intmain()
{
inti;
intcount=20;
intj;
for(j=0;j<20;j++)
{
room[j].r=0;
}

do
{
printf(" ");
printf("****************************************************************************** ");
printf("**************************歡迎使用溫馨99客房登記系統************************** ");
printf("******************************歡迎員工------1號******************************* ");
printf("好消息,特價鍾點房40元/2小時,單人房140元/間,雙人房230元/間,憑學生證有7折優惠 ");
printf(" 1.--登記客房信息<Insert> ");
printf(" 2.--查詢客房信息<Search> ");
printf(" 3.--修改客房信息<Change> ");
printf(" 4.--用戶退房管理<Outside> ");
printf(" 5.--顯示當前空房信息<ShowTheFreeRomm> ");
printf(" 6.--把客房信息保存到文件<SaveTheInformationintoFile> ");
printf(" 7.--從文件記錄讀取客房信息(維護中)<ShowTheInformationfromFile> ");
printf(" 8--退出客房管理系統<Exit> ");
printf("****************>>>>此程序由舒昱鑫吐血打造Version:1.0Bate>>>>**************** ");
printf("****************************************************************************** ");
printf("****************************************************************************** ");
printf("輸入需要選擇的功能:");
scanf("%d",&i);
switch(i)
{
case1:Login();break;
case2:Search();break;
case3:Change();;break;
case4:out();break;
case5:FreeRoom();break;
case6:save();break;
case7:load();break;
case8:printf("謝謝使用溫馨99的客房登記系統,正在退出.......... 退出成功,按任意鍵關閉程序!! ");break;
default:printf("輸入錯誤,請從新選擇");break;
}
}
while(i!=8);
return0;
}

❺ C語言編寫成績管理系統

//學生成績管理2014-6-1516:20:50onion
#include<iostream>
#include<string>
#include<fstream>
usingnamespacestd;


classstudent{

public:
student(int);
voidwrite();
voidread();
voiddel();


private:
intn;
stringname;
doublescore;
doublesc_music;
doublesc_math;
unsignedsc_coding;
doublesc_e;


};

intmain(){
start:
cout<<"┌────────────┐ "
<<"│學生成績管理系統│ "
<<"│1.輸入成績│ "
<<"│2.查詢成績│ "
<<"│3.刪除成績│ "
<<"│4.退出│ "
<<"└────────────┘ ";
intnum;
cin>>num;
while(num!=1&&num!=2&&num!=3&&num!=4){
cout<<"輸入無效,重新輸入(1-4):";
cin>>num;
}
switch(num){
case1:{
studenta(1);
break;
}
case2:{
studenta(2);
break;
}
case3:{
studenta(3);
break;
}
default:
exit(0);
break;

}gotostart;//請原諒goto的簡潔高效吧
system("PAUSE");
return0;
}

student::student(inta){
n=a;
if(n==1)
write();
elseif(n==2)
read();
elseif(n==3)
del();
else
;//很顯然,除了上面的,其餘參數傳不過來。空語句說明。}

voidstudent::write(){

// ofstreamwfile("admin.dat",ios::app);//這個文件用來存儲所有的學生成績文件。

cout<<"輸入學生名稱:";
cin>>name;
stringfname;
fname=name+".dat";
ofstreamfile;
file.open(fname.c_str());//open()要接受c風格字元串的文件名,所以將string用c_str()轉換

//wfile<<fname<<'$'<<endl;
file<<" 姓名:"<<name<<endl;

cout<<"輸入學生各科成績(1~100): Music:";
cin>>sc_music;
file<<"Music:"<<sc_music<<endl;
cout<<"math:";
cin>>sc_math;
file<<"math:"<<sc_math<<endl;
cout<<"E文:";
cin>>sc_e;
file<<"english:"<<sc_e<<endl;
cout<<"程序總行數(1~5W):";
cin>>sc_coding;
file<<"coding-line:"<<sc_coding<<"行"<<endl;

file.close();
//wfile.close();

}
voidstudent::read(){
cout<<"輸入學生名查詢成績:";
cin>>name;
name+=".dat";
ifstreaminfile(name.c_str());
if(!infile){
cout<<"openfileerror!"<<endl;
return;
}
else
cout<<"讀取數據中...."<<endl;getline(infile,name,'^');
cout<<name<<endl<<endl<<endl;


infile.close();

}
voidstudent::del(){
cout<<"輸入學生名刪除成績:";
cin>>name;
name+=".dat";
ifstreaminfile(name.c_str());//文件不存在時處理。
if(!infile){
cout<<"openfileerror!"<<endl;
return;
}
infile.close();//不需要使用文件時就要關閉的嘛。。
stringfname;
fname="del"+name;

system(fname.c_str());
cout<<name<<"刪除成功。"<<endl<<endl;
}

以前寫的,給你參考吧。恩,c++的,c的改下就好嘍。看思路思路

❻ c語言圖書管理系統 急需!!

我簡單給你說一下吧。
1、首先定義數據結構
圖書結構:圖書編號、圖書名稱、單價、作者、存在狀態
人員結構:人員編號(學生為學號,教師為工作編號)、姓名、性別等
借書結構:人員編號、圖書編號、借書時間、還書時間
2、由於是C系統,通常情況下,數據要存儲在文件中,因此,還需要定義文件結構:圖書、人員、借書信息。
為了數據處理速度,可將借書信息中已經還書的信息單獨放在還書信息中,借書信息中的數據只是已經借出還沒有歸還的數據。
3、系統功能定義,以及編碼。
由於系統太過龐大,你還是自己試著做一下吧,應該可以做好的。
學習本身就是做程序,如果有困難,可以上我們團隊提問題,隨時恭候!
祝學習進步!

❼ 用C語言寫個圖書館系統

下面可以參考參考!

完整的C語言圖書管理系統

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "graphics.h"
#include "math.h"
#define m 1
struct data
{ int year;
int month;
int day;
};

struct ReaderNode
{
char num[20];
struct data bro;
struct data back;
};

struct BookNode
{
char title[15];
char writer[15];
int currentnum;
int totalnum;
char brief[30];
struct ReaderNode reader[20];
};

struct TreeNode
{
int n;
struct TreeNode *prt;
int key[2*m];
struct BookNode *rec[2*m];
struct TreeNode *link[2*m+1];

};

struct BookNode *InputNode();
struct TreeNode *mbsearch(struct TreeNode *bth,int x,int *k,int *flag);
struct TreeNode *mbinsert(struct TreeNode *bth);
struct TreeNode *mbdel(struct TreeNode *bth);
void OutputNode(struct TreeNode *bth);
void borrow(struct TreeNode *bth);
void payback(struct TreeNode *bth);
char menu(void);
struct TreeNode *mbsearch(struct TreeNode *bth,int x,int *k,int *flag)
{
struct TreeNode *p,*q;
p=bth; *flag=0; q=p;
while( (p!=NULL) && (*flag==0) )
{
*k=1;q=p;
while( (*k < q->n) && ( q->key[*k-1] < x) ) *k=*k+1;
if( q->key[*k-1]==x) *flag=1;
else if( ( *k==q->n ) && ( q->key[*k-1] < x) ) {p=q->link[*k];p->prt=q;}
else { p=q->link[*k-1]; p->prt=q;*k=*k-1;}
}
return(q);
}

struct TreeNode *mbinsert(struct TreeNode *bth)
{
int flag,j,k,t;
int y,x,z;
struct TreeNode *p,*q,*u,*s;
struct BookNode *r,*l;
clrscr();
printf("\n\tPlease input the book you want to insert: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{

printf("\n\tHas %d this kind of book,do you want to add another?(y/n)\n",(q->rec[k-1])->totalnum);
z=getch();
if(z=='y'||z=='Y')
{
(q->rec[k-1])->totalnum++; (q->rec[k-1])->currentnum++;
printf("\n\tNow total has %d this kind of book,",(q->rec[k-1])->totalnum);
printf("\n\tand current has %d in the library.",(q->rec[k-1])->currentnum);
}
return(bth);
}
r=InputNode(bth);
if(bth==NULL)
{
bth=p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->n=1; p->key[0]=x; p->rec[0]=r;p->prt=NULL;
for(j=1;j<=2*m+1;j++) p->link[j-1]=NULL;
return(p);
}

p=NULL; t=0;
while(t==0)
{
if(k==q->n) {y=x;l=r;u=p;}
else
{
y=q->key[q->n-1]; l=q->rec[q->n-1];u=q->link[q->n];
for(j=(q->n)-1; j>=k+1; j--)
{
q->key[j]=q->key[j-1];q->rec[j]=q->rec[j-1];q->link[j+1]=q->link[j];
}
q->key[k]=x;q->rec[k]=r;q->link[k+1]=p;
if(p!=NULL) p->prt=q;
}

if(q->n<2*m)
{
q->n=(q->n)+1;
t=1;
q->key[(q->n)-1]=y; q->rec[(q->n)-1]=l; q->link[q->n]=u;
if(u!=NULL) u->prt=q;
}
else
{
p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->n=m; q->n=m; p->prt=q->prt;
x=q->key[m];r=q->rec[m];
for(j=1;j<=m-1;j++)
{
p->key[j-1]=q->key[m+j];p->rec[j-1]=q->rec[m+j];p->link[j-1]=q->link[m+j];
if(q->link[m+j]!=NULL) (q->link[m+j])->prt=p;

}

p->link[m-1]=q->link[2*m];
p->link[m]=u;
p->key[m-1]=y;
p->rec[m-1]=l;

if(u!=NULL) u->prt=p;
for(j=m+2;j<=2*m+1;j++)
{
q->link[j-1]=NULL;p->link[j-1]=NULL;
}

if(q->prt==NULL)
{
s=(struct TreeNode *)malloc(sizeof(struct TreeNode));
s->key[0]=x; s->rec[0]=r;
s->link[0]=q; s->link[1]=p;
s->n=1; s->prt=NULL; q->prt=s; p->prt=s;
for(j=3;j<=2*m+1;j++) s->link[j-1]=NULL;
bth=s; t=1;
}
else
{
q=q->prt; k=1;
while((k<=q->n)&&(q->key[k-1]<x)) k=k+1;
k=k-1;
}
}
}
return(bth);
}
struct TreeNode *mbdel(struct TreeNode *bth)
{
int flag,j,k,t;
int x,y;
struct TreeNode *u,*s,*p,*q;
struct BookNode *r,*l;
clrscr();
printf("\n\tPlease input the book you want to delete: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==0) { printf("\n\tThe book is not exist!\n"); return(bth);}
p=q->link[k];
if(p!=NULL)
{
while(p->link[0]!=NULL) p=p->link[0];
q->key[k-1]=p->key[0];
q->rec[k-1]=p->rec[0];
k=1;q=p;
}

for(j=k;j<=q->n-1;j++)
{
q->key[j-1]=q->key[j];
q->rec[j-1]=q->rec[j];
}
q->n=q->n-1;

while ((q!=bth)&&(q->n<m))
{
p=q->prt;j=1;
while(p->link[j-1]!=q) j=j+1;
if((j<=p->n)&&((p->link[j])->n>m))
{
s=p->link[j];
y=s->key[0];
l=s->rec[0];
u=s->link[0];
for(k=1;k<=s->n-1;k++)
{
s->key[k-1]=s->key[k];
s->rec[k-1]=s->rec[k];
s->link[k-1]=s->link[k];
}
s->link[s->n-1]=s->link[s->n];
s->link[s->n]=NULL;
s->n=s->n-1; q->n=q->n+1;
q->key[q->n-1]=p->key[j-1];
q->rec[q->n-1]=p->rec[j-1];
q->link[q->n]=u;
p->key[j-1]=y;
p->rec[j-1]=l;
if(u!=NULL) u->prt=q;
}
else if((j>1)&&((p->link[j-2])->n>m))
{
s=p->link[j-2];
q->n=q->n+1;
q->link[q->n]=q->link[q->n-1];

for(k=q->n-1;k>=1;k--)
{
q->key[k]=q->key[k-1];
q->rec[k]=q->rec[k-1];
q->link[k]=q->link[k-1];
}
q->key[0]=p->key[j-2];
q->rec[0]=p->rec[j-2];
u=s->link[s->n];
q->link[0]=u;
if(u!=NULL) u->prt=q;
p->key[j-2]=s->key[s->n-1];
p->rec[j-2]=s->rec[s->n-1];
s->link[s->n]=NULL;
s->n=s->n-1;
}

else
{
if(j==p->n+1)
{ q=p->link[j-2]; s=p->link[j-1]; j=j-1;}
else s=p->link[j];
q->key[q->n]=p->key[j-1];
q->rec[q->n]=p->rec[j-1];
t=q->n+1;
for(k=1;k<=s->n;k++)
{ q->key[t+k-1]=s->key[k-1];
q->rec[t+k-1]=s->rec[k-1];
u=s->link[k-1];
q->link[t+k-1]=u;
if(u!=NULL) u->prt=q;
}
u=s->link[s->n]; q->link[t+s->n]=u;
if(u!=NULL) u->prt=q;
q->n=2*m;
free(s);
for(k=j;k<=p->n-1;k++)
{
p->key[k-1]=p->key[k];
p->rec[k-1]=p->rec[k];
p->link[k]=p->link[k+1];
}
p->n=p->n-1; s=q; q=p;
}
}
if((q==bth)&&(q->n==0))
{ free(bth); bth=s; bth->prt=NULL;
if(s->n==0) {bth=NULL; free(s); }
}
printf("\n\tThe book has been delete !");
return(bth);
}
struct BookNode *InputNode()
{
struct BookNode *p;
int i;
p=(struct BookNode *)malloc(sizeof(struct BookNode));
clrscr();
fflush(stdin);
printf("\n\tInput the title: ");
gets(p->title);
printf("\n\tInput the writer: ");
gets(p->writer);
printf("\n\tInput the book current amount: ");
scanf("%d",&p->currentnum);
printf("\n\tInput the book total amount: ");
scanf("%d",&p->totalnum);
fflush(stdin);
printf("\n\tInput the book brief instruction: ");
gets(p->brief);
for(i=0;i<20;i++)
(p->reader[i]).num[0]='\0';
return(p);
}
void OutputNode(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
int k;
int x;
int flag;
clrscr();
printf("\n\tPlease input the book you want to search: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s\n",p->brief);
}
else printf("\n\tThis book is not exist!");
}
void borrow(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
struct ReaderNode *r;
int i,k, x, flag,t;
clrscr();
printf("\n\tPlease input the book you want to borrow: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tDo you want this book ?(y/n)");
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s",p->brief);
t=getch();
if(t=='y'||t=='Y')
{
if( (p->currentnum)==0) printf("\n\tSorry,this book has all borrow out...");
else
{
clrscr();
for(i=0;i<20;i++) if( (p->reader[i]).num[0]=='\0') break;
printf("\n\tPlease input your certificate number: ");
scanf("%s",(p->reader[i]).num);
printf("\n\tPlease input the borrow data: ");
printf("\n\tYear: ");
scanf("%d",&((p->reader[i]).bro.year));
printf("\tMonth: ");
scanf("%d",&((p->reader[i]).bro.month));
printf("\tDay: ");
scanf("%d",&((p->reader[i]).bro.day));

printf("\n\tPlease input the payback data: ");
printf("\n\tYear: ");
scanf("%d",&((p->reader[i]).back.year));
printf("\tMonth: ");
scanf("%d",&((p->reader[i]).back.month));
printf("\tDay: ");
scanf("%d",&((p->reader[i]).back.day));

p->currentnum--;
printf("\n\tYou have borrow the book.");}
}

}
else printf("\n\tThis book is not exist!");
}
void payback(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
int i,k, x, flag,t,j;
int year,month,day,d;
float pay;
char temp[20];
clrscr();
printf("\n\tPlease input the book you want to payback: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tDo you want to payback this book ?(y/n)");
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s",p->brief);
t=getch();
if(t=='y'||t=='Y')
{
if( (p->currentnum) >=(p->totalnum) )
printf("\n\tYou want to offer a more book ??\n");
else
{
clrscr();
printf("\n\tPlease input your certificate number: ");
scanf("%s",temp);
j=0;
for(i=0;i<20;i++)
{
if(! (strcmp(temp,(p->reader[i]).num))) {j=1;break;}
}
if(j==0) {printf("\n\tYou haven't borrow this book.");return;}
printf("\n\tToday is:");
printf("\n\tYear: ");
scanf("%d",&year);
printf("\tMonth: ");
scanf("%d",&month);
printf("\tDay: ");
scanf("%d",&day);

d=0;
if(year<(p->reader[i]).back.year) d=1;
if(year<=(p->reader[i]).back.year && month<(p->reader[i]).back.month) d=1;
if(year<=(p->reader[i]).back.year && month<=(p->reader[i]).back.month && day<(p->reader[i]).back.day) d=1;
if(d==0)
{
clrscr();
pay=(year-(p->reader[i]).back.year)*365+(month-(p->reader[i]).back.month)*30+(day-(p->reader[i]).back.day);
printf("\n\tYou borrow this book is in %d-%d-%d",(p->reader[i]).bro.year,(p->reader[i]).bro.month,(p->reader[i]).bro.day);
printf("\n\tYou should pay it back in %d-%d-%d",(p->reader[i]).back.year,(p->reader[i]).back.month,(p->reader[i]).back.day);
printf("\n\tToday is %d-%d-%d",year,month,day);
printf("\n\n\tSo you have go out the payback day");
printf("\n\tYou have to pay %2.1f Yuan.",0.1*pay);
}
(p->reader[i]).num[0]='\0';
p->currentnum++;
printf("\n\tYou have payback the book.");
}
}

}
else printf("\n\tYou want to payback an inexistence book ???");

}
donghua()
{int graphdriver=VGA;
int graphmode=VGAHI;
int i,j;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
clrscr();

for(i=0;i<=150;i+=5)
{setcolor(i);
textbackground(RED);
settextstyle(0,0,2);
outtextxy(100,i+140,"Liberary management System");
delay(10000000);
clrscr();
}
setcolor(RED);
outtextxy(50,200,"Loading");
delay(100000000000);
outtextxy(50,200,"Loading.");
delay(100000000000);
outtextxy(50,200,"Loading..");
delay(100000000000);
outtextxy(50,200,"Loading...");
delay(100000000000);
outtextxy(50,200,"Loading....");
delay(100000000000);
outtextxy(50,200,"Loading.....");
delay(100000000000);
outtextxy(50,200,"Loading......");
delay(100000000000);
outtextxy(50,200,"Loading.......");
delay(100000000000);
outtextxy(50,200,"Loading........");
delay(100000000000);
outtextxy(50,200,"Loading.........");
delay(100000000000);
outtextxy(50,200,"Loading..........");
delay(100000000000);
outtextxy(50,200,"Loading...........");
outtextxy(50,200,"Loading............");
delay(100000000000);
for(i=0;i<=10;i++)
delay(100000000000);
clrscr();

}
char menu(void)
{
clrscr();
window(1,1,80,25);
textmode(MONO);
textbackground(BLACK);
textcolor(5);
printf("\n\t ****************************************************");
printf("\n\t ***** Welcome to Liberary management System *****");
printf("\n\t ****************************************************");
printf("\n\t ****************************************************");
printf("\n\t *1.Add a book *");
printf("\n\t ****************************************************");
printf("\n\t *2.Delete a book *");
printf("\n\t ****************************************************");
printf("\n\t *3.Search a book *");
printf("\n\t ****************************************************");
printf("\n\t *4.Borrow a book *");
printf("\n\t ****************************************************");
printf("\n\t *5.Payback a book *");
printf("\n\t ****************************************************");
printf("\n\t *0.exit *");
printf("\n\t ****************************************************");
printf("\n\t please select: ");
return getch();
}
bofangdonghua()
{int graphdriver=VGA;
int graphmode=VGAHI;
int i,j;
char c;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
/*************shi fou bo fang dong hua?**************/
printf:{setcolor(RED);
settextstyle(3,0,5);
outtextxy(100,30,"bo fang dong hua?");
outtextxy(150,80,"Yes");
outtextxy(300,80,"No");
c=getch();
if(c=='Y'||c=='y')
{donghua();
menu();
}
else
if(c=='N'||c=='n')
menu();
else
{setcolor(GREEN);
settextstyle(3,0,8);
outtextxy(200,240,"Error!");
delay(10000000000);
clrscr();
goto printf;
}
}
/**************************************/

}

void main()
{
char c,t;
int x;
int k,flag,p=1;
struct TreeNode *bth=NULL;

bofangdonghua();

while(1)
{
c=menu();
putch(c);
getch();
switch(c)
{
case '1': bth=mbinsert(bth);

break;

case '2': bth=mbdel(bth);

break;

case '3': OutputNode(bth);
break;

case '4': borrow(bth);
break;

case '5': payback(bth);
break;

case '0': clrscr();
printf("\n\tDo you want to return ?(y/n)");
t=getch();
if(t=='y'||t=='Y') exit(0);
break;
defult :break;
}
printf("\n\tPress any key to the main menu....");
getch();
}
}

❽ c語言點菜系統

// 下面是前期的點餐系統的基礎數據維護,其它功能你可以自己嘗試寫,如果遇到什麼問題可以提出來追問喔,相信你可以解決的(我怕代碼太多提交會受字數限制)。

//mm.h頭文件
#include<stdio.h>
#include<stdlib.h>
#defineMENU_NUM_MAX100//假設有100種菜式
#defineLENsizeof(structMenuInfo)
structMenuInfo
{
intID;
charMenuName[20];
floatprice;
}Menu[MENU_NUM_MAX];

/*基礎數據維護*/
voidAddMenu()
{
FILE*fp;
intmenu_num;

printf(" 你要添加多少種菜?:");
scanf("%d",&menu_num);
for(inti=0;i<menu_num;i++)
{
printf(" ");//addedthisline
printf(" 請輸入ID:");
scanf("%d",&Menu[i].ID);
printf(" 請輸入菜名:");
scanf("%s",Menu[i].MenuName);
printf(" 請輸入[%s]菜的價格:",Menu[i].MenuName);
Menu[i].price=0.0f;//initialfloatprice
scanf("%f",&Menu[i].price);
fflush(stdin);
}

if((fp=fopen("MenuInfo.dat","ab"))==NULL)//openbinaryfile
{
printf("Can'topenfile ");
exit(1);
}
for(intj=0;j<menu_num;j++)
{
if(fwrite(&Menu[j],LEN,1,fp)!=1)//writingdatatobinaryfile
printf("Errorwritingfile. ");
}
fclose(fp);//closefilepoint
}

voidDisplayMenuInfo()
{
FILE*fp;
printf(" ID菜名 價格 ");//columnheadings
if((fp=fopen("MenuInfo.dat","rb"))==NULL)//openbinaryfile
{
printf("Can'topenfile ");
exit(1);
}

inti=0;
do
{
fseek(fp,i*LEN,SEEK_SET);//movefileheadlocation
if(fread(&Menu[i],LEN,1,fp))//
{
printf(" %d%5s %5.1f元 ",Menu[i].ID,Menu[i].MenuName,Menu[i].price);
i++;
}
}while(!feof(fp));

fclose(fp);
}
voidDeleteToMenu()
{
FILE*fp;
intMenuID;
inttodelete=-1;
inti=0;
printf("請輸入要刪除的菜名的ID:");
scanf("%d",&MenuID);

/**/
if((fp=fopen("MenuInfo.dat","rb"))==NULL)//openbinaryfile
{
printf("Can'topenfile ");
exit(1);
}

do
{
fseek(fp,i*LEN,SEEK_SET);//movefileheadlocation
if(fread(&Menu[i],LEN,1,fp))
{
if(Menu[i].ID==MenuID)todelete=i;
i++;
}
}while(!feof(fp));
fclose(fp);

if(todelete==-1)
{
printf("AmenuwiththatIDdoesn'texist ");
}
else
{
/**/
if((fp=fopen("MenuInfo.dat","wb"))==NULL)//openbinaryfile
{
printf("Can'topenfile ");
exit(1);
}

for(intj=0;j<i;j++)
{
if(j==todelete)continue;/*skiprecordtobedeleted*/
if(fwrite(&Menu[j],LEN,1,fp)!=1)//writingdatatobinaryfile
printf("Errorwritingfile. ");
}
fclose(fp);//closefilepoint
}
}
voidFindMenu()
{
FILE*fp;
intMenuID;
boolfind_mark=false;
printf(" 請輸入你要查找的菜名ID:");
scanf("%d",&MenuID);

printf(" ID菜名 價格 ");//columnheadings
if((fp=fopen("MenuInfo.dat","rb"))==NULL)//openbinaryfile
{
printf("Can'topenfile ");
exit(1);
}

inti=0;
do
{
fseek(fp,i*LEN,SEEK_SET);//movefileheadlocation
fread(&Menu[i],LEN,1,fp);//
if(Menu[i].ID==MenuID)
{
printf(" %d%5s %5.1f元 ",Menu[i].ID,Menu[i].MenuName,Menu[i].price);
find_mark=true;
break;
}

i++;
}while(!feof(fp));

if(!find_mark)printf(" 尊敬的客戶:我們餐廳沒有你要點的菜喔,你可以試試我們的招牌菜啊^-^. ");

fclose(fp);
}
/*基礎數據維護完畢*/
//sc.cpp主文件
#include<stdio.h>
#include<stdlib.h>
#include"mm.h"
voidmain(void)
{
//AddMenu();
//DisplayMenuInfo();
//FindMenu();
}

❾ c語言編寫程序時的注意事項

在進行C語言編寫程序時,需要注意以下幾點:

1. 編寫規范:要遵守C語言的編程規范,如變數命名規范、縮進、注釋等。編寫規范的代碼易於維護和理解,且可以提高代碼質量。

2. 內存管理:C語言中需要手動管理內存,包括內存分配、釋放等。要注意內存泄漏和指針錯誤等問題,避免程序崩潰或數據臘運損壞等情況。

3. 安全性輪旅梁:C語言對數據的邊界檢查並不嚴格,容易受到緩沖區溢出等安全問題的攻擊。在編寫程序時需要考慮安全性,包括輸入的數據驗證、防範攻擊等。

4. 錯誤處理:C語言中需要處理各種可能出現的錯誤,包括語法錯誤、運行時錯誤、編譯錯誤等。需要使用錯誤處理機制來處理這些錯誤,保證程序運行的穩定性和安全性。

5. 代碼復用性:C語言中可以使用函數和模塊化的方式來提高代碼的復用性。需要把相關的功能封裝成函數或模塊鎮辯,以便在程序的不同部分進行重用,提高代碼效率和可維護性。

除此之外,還需要注意代碼的可讀性和可維護性。編寫清晰易懂的代碼,遵守編程規范,注重代碼注釋,是提高代碼可讀性和可維護性的有效方法。