❶ 自學c語言需要准備什麼
自學C語言需要一定的計算機和數學等方面知識基礎。
如何自學c語言:
1、首先需要一本講解c語言基礎知識的書本,按照上面的知識講解一點點的學習c語言;
2、需要在電腦上面安裝c語言編譯軟體,可以選擇vc 6.0++或者Microsoft Visual Studio等軟體;
3、自己編寫一些小程序,熟悉編譯c語言程序的過程,並且檢驗自己學習的成果;
4、試著寫一些稍大型的c語言程序,達到進階目的,比如俄羅斯方塊,貪吃蛇等。
❷ c語言學習資料
要學好c語言,第一是看別人的源代碼程序,第二是自己多寫,一定要自己多寫,雖然很辛苦,寫一遍等於看三遍,只有多寫你才能真正學會它。當然你先得看一些好的實例,才知道如何寫。下面是我認為比較好的電子書,你用網路搜索一下,很多在csdn都可以免費下載。
1.經典教材:
譚浩強C程序設計(第2/3版)
譚浩強C程序設計題解.pdf (強烈推薦)
2.編程實例:
C語言精彩編程百例
C語言趣味程序百例精解 (強烈推薦)
C語言實用程序設計100例
C語言實例解析精粹(第二版)(220例,強烈推薦)
經典編程900例(C語言)
3.國外經典: (強烈推薦)
C和指針.pdf
C專家編程.pdf
C陷阱與缺陷
4.高級進階
C高級實用程序設計.pdf(清華大學出版)(強烈推薦)
C語言高級實例解析
高質量C/C++編程指南.doc
❸ 要完全掌握C語言需要學習哪幾門課程
完全掌握估計你是很難做到了,就連c語言之父也很難做到完全掌握呢,有三門課很重要,一門是匯編語言,一門是數據結構 ,還有一門是編譯原理,望採納
❹ c語言是什麼學之前需要做什麼准備嗎
c語言是一種開發語言(
高級語言
),其他還有java,c++等,但是c語言是
面向過程
,java和c++是面向對象的,
開發前准備,准備一本C語言開發書,一台電腦,電腦上安裝開發軟體;
❺ 新人求教c語言
const char * mesage = "wo,e"; 這句聲明了 mesage 是 char 型指針,並初始化,使他指向一個字元串。
後面的 = "wo,e"; 里, 雙引號括起來的叫 「字元串常量」,它含 wo,e 4個字元,外加一個字元串結束符 "\0"。
printf("%s", mesage); 是正確的語句,輸出格式 %s 是 輸出一個字元串,直到字元串結束符為止。要求的輸出參數 是 地址。mesage 被聲明為指針,語句里 mesage 就是指針(是地址)。
不是printf("%s", *mesage); 語句里這樣寫出來的 *mesage 是 地址指向的值。%s格式要求 輸出參數是 字元串的首地址。
---
如果 輸出格式是 %c, 那麼語句對參數的要求不同。要求指向的值。
const char * mesage = "wo,e";
printf("%c", *mesage); //列印出 w
printf("%c", *(mesage+1)); //列印出 o
printf("%c", *(mesage+3)); //列印出 e
❻ 怎麼樣講好 C 語言課
個人覺得,一個好的C語言老師應該做到:1.消除學生對C的恐懼感和神秘感。讓學生認識到C只不過是眾多計算能及語言中的一種,為我們服務。2.強調C的重要性,C是一種面向過程的經典語言,其中的思考方式,語法對於今後學習其他語言有著很大的幫助。3.最重要的是,要把我們的交際語言到C語言的一個引入過程要把握好,當然這牽涉到許多的計算機發展史方面的知識,這些都可以在你備課的時候多准備准備。萬事開頭難,做好充足的准備,有著一個好的育人心態,我相信你的授課會得到學生的認可,從而更積極的配合你以後的工作!祝你好運!
❼ c語言課程設計
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{
char id[10];
char name[20];
char phone[20];
char adress[40];
char postcode[10];
char e_mail[30];
}student[500];
int num=0;//外部變數num為文件中的紀錄數
FILE *fp;
void mainmenu();//主菜單
void newrecord();//新添紀錄
void searchmenu();//查詢菜單
void searchbyid();//按學號查詢
void searchbyname();//按姓名查詢
void searchbyphone();//按電話查詢
void deletemenu();//刪除菜單
void deleteall();//刪除所有
void deleteone();//刪除單個
void showall();//顯示所有
void readfromfile();//讀取文件
void writetofile();//寫入文件
void deletebyid();//按學號刪除
void deletebyname();//按姓名刪除
void listbyid();//按學號排序
void listbyname();//按姓名排序
void listmenu();//排序菜單
void main()
{
readfromfile();
while (1)
{
mainmenu();
}
}
void readfromfile()//從文件導入
{
if((fp=fopen("student.bin","rb"))==NULL)
{
printf("\n\t\t通訊錄文件不存在");
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t建立失敗");
exit(0);
}
else
{
printf("\n\t\t通訊錄文件已建立");
printf("\n\t\t按任意鍵進入主菜單");
getch();
return;
}
exit(0);
}
fseek(fp,0,2); /*文件位置指針移動到文件末尾*/
if (ftell(fp)>0) /*文件不為空*/
{
rewind(fp); /*文件位置指針移動到文件開始位置*/
for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);
printf("\n\t\t文件導入成功");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
printf("\n\t\t文件導入成功");
printf("\n\t\t通訊錄文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
void mainmenu()//主菜單
{
char choic;
system("cls");
printf("\n\t\t******************** 主菜單 ********************");
printf("\n\t\t*********** 1-新添紀錄 2-查詢菜單 ************");
printf("\n\t\t*********** 3-刪除菜單 4-記錄排序 ************");
printf("\n\t\t*********** 5-保存退出 6-不保存退出***********");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':newrecord();break;
case '2':searchmenu();break;
case '3':deletemenu();break;
case '4':listmenu();break;
case '5':writetofile();break;
case '6':exit(0);
default:mainmenu();
}
}
void searchmenu()//查詢菜單
{
char choic;
system("cls");
printf("\n\t\t******************* 查詢菜單 *******************");
printf("\n\t\t********** 1-顯示所有 2-按學號查詢 ************");
printf("\n\t\t********** 3-按姓名查詢4-按電話查詢 ************");
printf("\n\t\t********** 5-返回主菜單 ************");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':showall();break;
case '2':searchbyid();break;
case '3':searchbyname();break;
case '4':searchbyphone();break;
case '5':mainmenu();break;
}
}
void deletemenu()//刪除菜單
{
char choic;
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 刪除菜單 *******************");
printf("\n\t\t*********** 1-刪除所有 2-刪除單個 ***********");
printf("\n\t\t*********** 3-返回主菜單 ***********");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':deleteall();break;
case '2':deleteone();break;
case '3':mainmenu();break;
default:mainmenu();break;
}
}
void deleteall()//刪除所有
{
printf("\n\t\t確認刪除?(y/n)");
if (getch()=='y')
{
fclose(fp);
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t不能打開文件,刪除失敗");
readfromfile();
}
num=0;
printf("\n\t\t紀錄已刪除,按任意鍵返回主菜單");
getch();
return;
}
else
return;
}
void deletebyname()//按姓名刪除
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\n\t\t請輸入要刪除學生姓名:");
scanf("%s",name);
for (i=a;i<num;i++)
{
if (strcmp(student[i].name,name)==NULL)
{
printf("\n\t\t以下是您要刪除的學生紀錄:");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t學號: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t電話: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t________________________________");
printf("\n\t\t是否刪除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從stud數組中刪除之*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
if((i+1)<num)
{
printf("\n\t\t是否繼續刪除相同姓名的同學信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf("\n\t\t是否繼續刪除相同姓名的同學信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\n\t\t沒有該同學的紀錄");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
return;
}
else if (findmark!=0)
{
printf("\n\t\t沒有重名信息");
printf("\n\t\t沒有該同學的紀錄");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
return;
}
}
void deletebyid()//按學號刪除
{
int i,j;
int deletemark=0;
char id[20];
printf("\n\t\t請輸入要刪除學生學號:");
scanf("%s",id);
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].id,id)==NULL)
{
printf("\n\t\t以下是您要刪除的學生紀錄:");
printf("\n\t\t學號: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t電話: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t是否刪除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從stud數組中刪除之*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t沒有該同學的紀錄");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
}
}
void newrecord()//添加紀錄
{
printf("\n\t\t**************** 請輸入學生信息 ****************\n");
printf("\n\t\t輸入學號:");
scanf("%s",&student[num].id);
printf("\n\t\t輸入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t輸入電話號碼:");
scanf("%s",&student[num].phone);
printf("\n\t\t輸入地址:");
scanf("%s",&student[num].adress);
printf("\n\t\t輸入郵編:");
scanf("%s",&student[num].postcode);
printf("\n\t\t輸入e-mail:");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否繼續添加?(Y/N):");
if (getch()=='y')
newrecord();
return;
}
void showall()//顯示所有
{
int i;
system("cls");
if(num!=0)
{
printf("\n\t\t*************** 以下為通訊錄所有信息************");
for (i=0;i<num;i++)
{
printf("\n\t\t學號: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t電話: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\t郵編: %s",student[i].postcode);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\t\t");
if (i+1<num)
{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通訊錄中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單:");
getch();
return;
}
//按電話查詢
void searchbyphone()
{
int mark=0;
int i;
int a=0;
printf("\n\t\t****************** 按電話查找 ******************");
char phone[10];
printf("\n\t\t請輸入學號:");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\n\t\t************** 以下是您查找的學生信息 **********");
printf("\n\t\t學號: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t電話: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t沒有改學生的信息");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
void searchbyname()//按姓名查詢
{
int mark=0;
int i;
int a=0;
printf("\n\t\t***************** 按姓名查找 *******************");
char name[20];
printf("\n\t\t請輸入姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\n\t\t************* 以下是您查找的學生信息 ***********");
printf("\n\t\t學號: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t電話: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
if ((i+1)<num)
{
printf("\n\t\t是否繼續查找相同名字的學生信息:(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
else
return;
}
else
{
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
}
if(mark!=0)
{
printf("\n\t\t沒有相同姓名的學生紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
else
{
printf("\n\t\t沒有相同姓名的學生紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
void searchbyid()//按學號查詢
{
int mark=0;
int i;
int a=0;
printf("\n\t\t****************** 按學號查找 ******************\n");
char id[10];
printf("\n\t\t請輸入學號:");
scanf("%s",id);
for(i=0;i<num;i++)
{
if (strcmp(student[i].id,id)==0)
{
printf("\n\t\t************** 以下是您查找的學生信息 **********");
printf("\n\t\t學號: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t電話: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t沒有改學生的信息");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
void writetofile()//寫入文件
{
int i;
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t文件打開失敗");
}
for (i=0;i<num;i++)
{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t寫入文件錯誤!\n");
}
}
fclose(fp);
printf("\n\t\t通訊錄文件已保存");
printf("\n\t\t按任意鍵退出程序\n\t\t");
exit(0);
}
void deleteone()//刪除單個
{
char choic;
printf("\n\t\t1-按學號刪除 2-按姓名刪除");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':deletebyid();break;
case '2':deletebyname();break;
}
}
void listbyname()//按姓名排序
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否顯示?(y/n)");
if (getch()=='y')
showall();
return;
}
void listbyid()//按學號排序
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].id,student[i-1].id)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.id,student[j].id)<0)&&j>=0);
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否顯示?(y/n)");
if (getch()=='y')
showall();
return;
}
void listmenu()//排序菜單
{
char choic;
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 排序菜單 *******************");
printf("\n\t\t********** 1-按學號排序 2-按姓名排序 **********");
printf("\n\t\t********** 3-返回主菜單 **********");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch(choic)
{
case '1':listbyid();break;
case '2':listbyname();break;
case '3':mainmenu();break;
default:mainmenu();break;
}
}
請採納答案,支持我一下。
❽ 怎樣通過教學語言上好一堂C語言程序設計課
摘要:教學語言是課堂教學中師生之間進行交流的重要工具,其運用得是否恰當,更是課堂教學能否取得高效的關鍵。因此將生動、有趣的教學語言引入C程序設計課,無疑將會極大地提高學生對枯燥的C語言基本理論知識的求知慾,確保教學效果。 關鍵字: C程序設計;課堂教學;教學語言 【中圖分類號】 G633.67 【文獻標識碼】 C 【文章編號】1671-8437(2011)01-0038-02 教學語言是課堂教學中師生之間進行思想交流的重要工具。教師通過教學語言,把知識傳授給學生,其教學語言發揮的高低,是課堂教學能否取得高效的關鍵。教師應學會運用語言藝術,捕捉最佳的教學時機,成功達到的教育學生的目的和獲得高效的教學質量。
❾ c語言課程設計
學生成績的太多了,幫你找了一個圖書管理的,希望能幫上忙,代碼如下:
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define LEN sizeof(struct booklist)
#define LEN2 sizeof(struct memberlist)
#define LEN3 sizeof(struct readers)
typedef struct readers//借書信息結構體
{
char name[30];//借書人的姓名
struct readers *next2;
}reader;
//書本信息結構體
typedef struct booklist
{
char num[20]; //書號
char name[30]; //書名
char concern[50];//出版社
char date[20];//出版日期
char author[20];//作者
int page;//頁數
int price;//價格
int imformation;//圖書剩餘數量
reader *a;//借閱人
struct booklist *next;
}Book;
void creatlist();//創建新的書本信息
void print(Book *head);//列印書本信息
void save(Book *head);//儲存書本信息
void AddBook();//添加書本信息
void DelBook();//刪除書本信息
Book *read();//讀取書本信息
void manager();//管理員操作
void Bookconsult(); //圖書查詢
int Borrow();//借書
int Return();//還書
Book *sort(Book *head);//書本信息按書號排序
void imformation();//系統信息
Book *head=NULL,*p1=NULL,*p2=NULL;
//創建新的書本信息
void creatlist()
{
int i,n;
printf("要創建的書本數目");
scanf("%d",&n);
p2=head=(Book *)malloc(LEN); //創建帶有頭結點的鏈表
p2->a=(reader *)malloc(LEN3);
p2->a->next2=NULL;
p2->next=NULL;
printf("請輸入書的信息:\n");
for(i=1;i<=n;i++)
{
p1=(Book *)malloc(LEN);
printf("書號: "); scanf("%s",p1->num);
printf("書名: "); scanf("%s",p1->name);
printf("出版社: "); scanf("%s",p1->concern);
printf("出版日期: "); scanf("%s",p1->date);
printf("作者: "); scanf("%s",p1->author);
printf("書本頁數: "); scanf("%d",&p1->page);
printf("書本價格(元): "); scanf("%d",&p1->price);
p1->a=(reader *)malloc(LEN3);
p1->a->next2=NULL;
p1->imformation=10;
p1->next=NULL;
p2->next=p1;
p2=p1;
if(i<n) printf("下一本:\n");
}
head=sort(head);
save(head);
print(head);
}
//列印書本信息
void print(Book *head)
{
Book *p=NULL;
reader *p0=NULL;
p=head->next;
printf("*******************************************************************************\n");
while(p!=NULL)
{
printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) : %d\n剩餘數量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);
printf("借閱圖書的人:");
if(p->a->next2==NULL) printf("------------暫無借閱人!");
else
{
for(p0=p->a->next2;p0!=NULL;p0=p0->next2)
{
printf("%s ",p0->name);
}
}
p=p->next; /* p後移一個結點 */
printf("\n");
printf("\n");
}
}
//書本信息按書號排序
Book *sort(Book *head)
{
Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next;
p1=head2;
while(p1->next!=NULL)
{
min=p2=p1; /*把首結點作為最小值*/
while(p2->next!=NULL)
{
if(strcmp(min->num,p2->next->num)>0) /*首結點與下一結點比較*/
{
min2=p2;
min=p2->next;
}
p2=p2->next;
}
if(min!=p1)
{
min2->next=min->next; /*刪除最小結點*/
min->next=p1; /*插入最小結點*/
if(p1==head2) head2=min;
else p3->next=min; /*p3為min前的結點指針*/
p3=min;
}
else
{
p3=p1;
p1=p1->next;
}
}
head->next=head2;
return(head);
}
//儲存書本信息
void save(Book *head)
{
FILE *fp,*fp2;
Book *p=NULL;
reader *q=NULL;
fp=fopen("書本信息.txt","wb"); //printf("不能打開文件!\n");
fp2=fopen("借閱信息.txt","wb"); //printf("不能打開文件!\n");
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp); /*逐個結點寫文件*/
for(q=p->a;q!=NULL;q=q->next2)
{fwrite(q,LEN3,1,fp2);}
p=p->next;
}
fclose(fp);
fclose(fp2);
}
//添加書本信息
void AddBook()
{
FILE *fp,*fp2;
Book *addbook=NULL;
reader *p0=NULL;
fp=fopen("書本信息.txt","ab"); //追加方式打開文件
fp2=fopen("借閱信息.txt","ab");
addbook=(Book *)malloc(LEN);
printf("輸入書本信息:\n");
printf("書號: "); scanf("%s",addbook->num);
printf("書名: "); scanf("%s",addbook->name);
printf("出版社: "); scanf("%s",addbook->concern);
printf("出版日期: "); scanf("%s",addbook->date);
printf("作者: "); scanf("%s",addbook->author);
printf("書本頁數: "); scanf("%d",&addbook->page);
printf("書本價格(元): "); scanf("%d",&addbook->price);
p0=(reader *)malloc(LEN3);
p0->next2=NULL;
addbook->a=p0;
addbook->imformation=10;
addbook->next=NULL;
fwrite(addbook,LEN,1,fp); /*塊寫*/
fwrite(p0,LEN3,1,fp2);
fclose(fp);
fclose(fp2);
}
//讀取書本信息
Book *read()
{
FILE *fp,*fp2;
Book *p=NULL,*p1=NULL,*head=NULL;
reader *p0=NULL,*p2=NULL;
if((fp=fopen("書本信息.txt","rb"))==NULL) printf("不能打開文件或文件不存在!\n");
if((fp2=fopen("借閱信息.txt","rb"))==NULL) printf("不能打開文件或文件不存在!\n");
head=(Book *)malloc(LEN);
fread(head,LEN,1,fp);
p1=head;
p0=(reader *)malloc(LEN3);
fread(p0,LEN3,1,fp2);
p0->next2=NULL;
head->a=p0;
head->next=NULL;
p=(Book *)malloc(LEN);
while(fread(p,LEN,1,fp)) /*逐個結點讀取*/
{
p1->next=p;
p1=p1->next;
p0=(reader *)malloc(LEN3);
p1->a=p0;
while(fread(p0,LEN3,1,fp2))
{
if(p0->next2==NULL)
{
p2=p0;
p0=(reader *)malloc(LEN3);
break;
}
p2=p0;
p0=(reader *)malloc(LEN3);
p2->next2=p0;
}
free(p0);
p2->next2=NULL;
p=(Book *)malloc(LEN);
}
p1->next=NULL;
free(p);
fclose(fp);
fclose(fp2);
head=sort(head);
if(head!=NULL) return(head);
else
{
printf("文件為空!\n");
return 0;
}
}
//刪除書本信息
void DelBook()
{
Book *head=NULL,*p=NULL,*q=NULL;
char bookname[30];
head=read();
printf("輸入要刪除的書名: ");
scanf("%s",bookname);
p=head;
while(p!=NULL)/*按名字查找要刪除的圖書*/
{
if(strcmp(p->name,bookname)==0)
{
if(p==head)
{
head=head->next;
break;
}
else
{
q->next=p->next;
break;
}
}
q=p;
p=p->next;
}
save(head);
}
//管理員操作
void manager()
{
int n,i=0,k=1;
while(k==1)
{
printf("********************************************************************************\n");
printf(" 請選擇你需要的操作\n");
printf(" ◎ 1.建立新的書本信息\n");
printf(" ◎ 2.插入書本信息\n");
printf(" ◎ 3.刪除書本信息\n");
printf(" ◎ 4.讀取所有書本信息\n");
printf(" ◎ 5.讀取指定書本信息\n");
printf(" ◎ 6.返回到上級目錄\n");
printf(" ◎ 7.保存並退出\n");
printf("請輸入:");
scanf("%d",&n);
switch(n)
{
case 1: creatlist();break;
case 2: AddBook();break;
case 3: DelBook();break;
case 4: head=read();system("CLS");print(head);break;
case 5: system("CLS");Bookconsult();break;
case 6: k=0;break;
default: k=0;break;
}
}
}
//圖書查詢
void Bookconsult()
{
int n,m=1,sign=0;
Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL;
reader *p2=NULL;
char a[30],b[20],c[20];
head=read();
while(m==1)
{
printf(" 請選擇你查詢書本的方式: 1.按書名 2.按書的編號 3.按書的作者 4.退出查詢\n");
printf("輸入=");
scanf("%d",&n);
switch(n)
{
case 1: printf("請輸入書名:");
scanf("%s",a);
p0=head;
while(p0!=NULL)
{
if(strcmp(a,p0->name)==0)
{
printf("*******************************************************************************\n");
printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) : %d\n剩餘數量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借閱圖書的人:");
if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("沒有這本書的信息.\n");
break;
case 2: printf("請輸入書的編號:");
scanf("%s",b);
p0=head;
while(p0!=NULL)
{
if(strcmp(b,p0->num)==0)
{
printf("*******************************************************************************\n");
printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) : %d\n剩餘數量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借閱圖書的人:");
if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
break;
}
else p0=p0->next;
}
if(p0==NULL) printf("沒有這本書的信息.\n");
break;
case 3: printf("請輸入書的作者:");
scanf("%s",c);
p0=head;
while(p0!=NULL)
{
if(strcmp(c,p0->author)==0)
{
printf
("*******************************************************************************\n");
printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) %d\n剩餘數量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借閱圖書的人:");
if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("沒有這本書的信息.\n");
break;
default: m=0;break;
}
}
}
//借書
int Borrow()
{
char a[30],b[30],c;
Book *p0=NULL,*head=NULL;
reader *p2=NULL,*p3=NULL;
head=read();
printf("請輸入要借的書的書號:");
scanf("%s",a);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(a,p0->num))==0)
{
if(p0->imformation>0)
{
printf("圖書在館,可以借出,是否確定借出?'y'or'n'\n");
c=getchar();
scanf("%c",&c);
if(c=='y')
{
printf("請再次輸入你的用戶名:");
scanf("%s",b);
p3=(reader *)malloc(LEN3);
strcpy(p3->name,b);
if(p0->a->next2==NULL)
{
p0->a->next2=p3;
p3->next2=NULL;
}
else
{
for(p2=p0->a;p2->next2!=NULL;p2=p2->next2);
p2->next2=p3;
p3->next2=NULL;
}
--p0->imformation;
save(head);
printf("操作完成,可以帶走圖書。\n");
return 1;
break;
}
else
{
return 0;
break;
}
}
else printf("很抱歉,該圖書不在館.\n");return 0;break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("很抱歉,沒有這本書。\n");
return 0;
}
else return 2;
}
//還書
int Return()
{
Book *p0=NULL,*head=NULL;
reader *p2=NULL,*p3=NULL;
char c[20],b[30];
head=read();
printf("請輸入要還的書的書號:");
scanf("%s",&c);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(c,p0->num))==0)
{
printf("請輸入你的用戶名:");
scanf("%s",&b);
if(p0->a->next2==NULL) {printf("你沒有借這本書!\n");break;}
else
{
p3=p0->a;
p2=p3->next2;
while(p2!=NULL)
{
if(strcmp(p2->name,b)==0)
{
if(p2->next2==NULL) {p3->next2=NULL;free(p2);break;}
else
{
p3->next2=p2->next2;
free(p2);
break;
}
}
else
{
p3=p2;
p2=p2->next2;
}
}
if(p2==NULL) printf("你沒有借這本書!\n");
}
++p0->imformation;
save(head);
printf("書已歸館,操作完成。\n");
return 1;
break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("沒有這本書。\n");
return 0;
}
else return 2;
}
//借書信息
void imformation()
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ 歡迎你使用我們的圖書管理系統!以下是本系統的有關說明: ※\n");
printf("※本系統主要功能是進行圖書的有關管理,你可以進行圖書信息的創建、插入、刪除、 ※\n");
printf("※查詢;在操作中主要是以阿拉伯數字來選擇相應的菜單功能,在選擇時以'y'表示 '是' ※\n");
printf("※以'n'表示'不是'。在你操作的時候就會有相應的操作提示。 ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}
main()
{
int n,k=1;
printf("********************************************************************************\n");
printf("\n\n");
printf(" 歡迎進入我們的圖書管理系統! \n");
printf("\n\n");
printf("********************************************************************************\n");
while(k==1)
{
printf(" 請選擇你的操作: 1.管理員操作 2.系統信息 3.退出系統\n");
printf("********************************************************************************\n");
printf(" 你的選擇是:");
scanf("%d",&n);
system("CLS");
switch(n)
{
case 1: manager();break;
case 2: imformation();break;
default: printf("+++++++++++++++++++++++++++歡迎你再次使用我們的系統!++++++++++++++++++++++++++++\n");k=0;break;
}
}
}