用C語言寫的一個順序表
/**********需求************
***************************
模擬一種場景,圖書管理系統
***************************
Function:
增add_book()
刪delete_book()
改modify_book()
查check_book()
***************************
實現吧!
***************************/
#include<stdio.h>//裡面包括標準的輸入輸出,以及perror("fail to open")這樣的用法
#include<string.h>
#define COUNT_SIZE 120 //此處為符號常量,注意這裡沒有分號,也可以用typedef定義,只能為型別的定義;
#define OK 0
#define ERROR 1
typedef char string[20];
//定義一組資料型別
struct book{
int number; //圖書編號
int count; //圖書數量
int price; //圖書價格
string name; //圖書名稱
};
struct list{
struct book Book[COUNT_SIZE];//定義順序表要儲存的資料,也可以是簡單的int型別或者char,float,double等基本資料型別
int length;
};
typedef struct list List;//為結構體struct list 取一個別名List
//定義以下操作名稱,為什麼有的要加*指標操作符,因為這些操作將要修改資料的結構,所以需要傳地址
void init(List *L);//初始化操作
int add_book(List *L);//增加一本書
int delete_book(List *L);//刪除一本書,
int modify_book(List *L);//修改書的屬性
int is_empty(List L);//判斷書的數量是否為空
int is_full(List L);//判斷書的數量是否達到了極限
int findbookname(List L,string name);//根據書名查詢書籍的位置
int findbooknumber(List L,int num);//根據書的編號查詢書籍的位置
int count_book(List L);//計算出總數
void travel(List L);//遍歷整個順序表
//以下為每個函式的實現
void init(List * L)//初始化函式,使順序表的長度為0
{
L->length=0;
}
int add_book(List *L)//增加一本書
{
if(is_full(*L)){
printf("對不起,數量已經達到了極限,不能再繼續新增");
return ERROR;
}
printf("輸入要新增書籍的名稱:");
scanf("%s",&(L)->Book[L->length].name);
printf("輸入要新增書籍的編號:");
scanf("%d",&(L)->Book[L->length].number);
printf("輸入要新增書籍的數量:");
scanf("%d",&(L)->Book[L->length].count);
printf("輸入要新增書籍的價格:");
scanf("%d",&(L)->Book[L->length].price);
printf("\n新增結束@
L->length++;//長度加1
return OK;
}
int delete_book(List *L)//刪除一本書
{
int check,num;
string book_name;
if(is_empty(*L)){
printf("書籍為空,無法完成刪除操作@[email protected]\n");
return ERROR;
}
set1://標號,goto語句跳轉到這裡
printf("你想根據1.書籍名稱、還是2.編號刪除?請輸入如下選項:");
scanf("%d",&check);
switch(check)
{
case 1:
printf("根據書名來刪除操作");
scanf("%s",book_name);
strcpy(L->Book[findbookname(*L,book_name)].name,"");//除錯了好久好久,其中包括了雙引號和單引號以及NULL的區別,
//NULL表示空指標,空指標不能作為拷貝函式的引數
L->Book[findbookname(*L,book_name)].count = 0;
L->Book[findbookname(*L,book_name)].number = 0;
L->Book[findbookname(*L,book_name)].price = 0;
break;
case 2:
printf("根據書的編號來進行操作");
scanf("%d",&num);
strcpy(L->Book[findbooknumber(*L,num)].name,"");
L->Book[findbooknumber(*L,num)].count = 0;
L->Book[findbooknumber(*L,num)].number = 0;
L->Book[findbooknumber(*L,num)].price = 0;
break;
default:
printf("輸入資料錯誤,重新輸入:");
goto set1;
}
L->length--;
return OK;
}
int modify_book(List *L)//修改書的屬性
{
string name;
int count;
int number;
int price;
printf("請輸入需要修改的書名:\n");
scanf("%s",&name);
printf("請輸入書的數量:\n");
scanf("%d",&count);
//printf("%d",findbookname(*L,name));測試下標是否正確
L->Book[findbookname(*L,name)].count = count;
printf("請輸入書的編號: \n");
scanf("%d",&number);
L->Book[findbookname(*L,name)].number = number;
printf("請輸入書的價格: \n");
scanf("%d",&price);
L->Book[findbookname(*L,name)].price = price;
printf("請輸入新的名稱: \n");
scanf("%s",L->Book[findbookname(*L,name)].name);//此處花費我10分鐘時間排錯,我此時如果修改了name,那麼
//接下來的findbookname()中引數也會變化,所以不對
printf("修改結束! @
return OK;
}
int check_book(List L)//檢視一本書是否存在
{
string name;
if(is_empty(L)){
printf("書籍為空,無法查詢[email protected]@\n");
return ERROR;
}
printf("請輸入書名");
scanf("%s",&name);
// findbookname(L,name)>0?printf("%s存在\n",name):printf("%s不存在\n",name);//等效的三元運算子
if(findbookname(L,name)<0)//判斷根據書名查詢書的位置,返回書的位置
{
printf("%s不存在\n",name);
}
else
printf("%s存在\n",name);
return OK;
}
int is_empty(List L)//判斷書的數量是否為空
{
if(L.length<0)
{
return ERROR;//返回1
}
else
return OK;//返回0
}
int is_full(List L)//判斷書的數量是否達到了極限
{
if(L.length == COUNT_SIZE)
return ERROR;
else
return OK;
}
int findbookname(List L,string name)//根據書名查詢書籍的位置
{
int times;//記錄查詢的位置
if(is_empty(L)){
printf("書籍為空,無法查詢
return ERROR;
}
for(times = --L.length; times >= 0;times--)
{
if(strcmp(L.Book[times].name,name)==0)
{
return times;
}
}
return ERROR;
}
int findbooknumber(List L,int num)//根據書的編號查詢書籍的位置
{
int times;//記錄查詢的位置
if(is_empty(L)){
printf("書籍為空,無法查詢[email protected]@\n");
return ERROR;
}
for(times = L.length-1; times >= 0;times--)
{
if(L.Book[times].number==num)
{
return times;
}
}
return ERROR;
}
void travel(List L)//遍歷整個順序表
{
int times = L.length;
while(times-->0)
{
printf("第%d本書:\n",times+1);
printf("數量是:%d\n",L.Book[times].count);
printf("名稱是:%s\n",L.Book[times].name);
printf("價格是:%d\n",L.Book[times].price);
printf("編號是:%d\n",L.Book[times].number);
}
return ;
}
int count_book(List L)//計算出總數
{
printf("一共有%d本\n",L.length);
return OK;
}
// 以下為測試函式
int main(void)
{
List list; //定義一個順序表
init(&list);
add_book(&list); //增加操作
travel(list);
modify_book(&list); //修改操作
travel(list);
check_book(list); //查詢操作
delete_book(&list); //刪除操作
travel(list); //遍歷操作
count_book(list); //計算總數
}
/*給我的幾點教訓就是:
1、必須要知道全域性變數的作用域,不能隨意的定義全域性變數,很容易在函式中修改,找不到錯誤。
2、strcpy函式以及strcmp函式要學會呼叫,以及strlen函式的使用方法。
3、關於字串的一些操作還不是很明白,“”和‘’以及NULL的區別
*/
相關推薦
用C語言寫一個好玩的寶石一樣的圖像
循環圖像圖形#include<stdio.h>main(){int n;scanf("%d",&n); for(int i=0;i<n;i++) { for(int j=0;j<n-i-1;j++) { printf(" ")
怎麽用C語言寫一個飛機程序
sge 怎麽 das mob gpl hdd ref dhx cte 5zeffurgal誥退俁稼犢爍厝擋傅鼓《http://weibo.com/p/230927987816857564094464》 wv8kbiqhdd壁溉斡吠戎琴痛鋼匙谷《http://weibo.c
用C語言寫一個簡單的三子棋,實現玩家與電腦的對戰
原始碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 寫一個三子棋 */ //邏輯: //1. 畫
用C語言寫一個簡單的掃雷小遊戲
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 語言寫一個簡單的掃雷遊戲 */ // 1.寫一個遊戲選單 M
用C語言寫一個掃雷程式
執行環境:win10 vs2013 本程式所有設計思路均已註釋行為標記在程式中,為了方便起見,將不在部落格中進行書寫,想要學的朋友複製下面的原始碼可進行學習,也可將程式進行修改獲取不同的遊戲體驗 程式原始截圖 執行結果:
C函式指標妙用,用c語言寫一個簡易類
其實在C++中的物件也並不是實現起來也並不是多麼的什麼神祕,只是編譯器幫我們做了許多工作,所以我們總覺得C++要比c語言難一些,C++編譯器其實對於類中的非Virtual 函式的的呼叫規則與對C編譯器對函式的呼叫時一樣的,那就是通過call 函式地址的方法。等有
用C語言寫一個日期計算器
首先,我們應知道日期計算器包括哪些功能1、明天的日期2 、n天后的日期3、兩個日期之間的天數我們先從第一個功能開始,首先建立一個日期的結構體,包括:年、月、日。struct date { int day; int month; int year; };其次來看一下解
用c語言寫一個猜數字遊戲
#include <time.h> #include <stdlib.h> void menu() { printf("******歡迎進入猜數字遊戲*****\n"); printf("****** 1. 開始遊戲 *****\n")
用C語言寫的一個順序表實現圖書館書籍管理
Function: 增add_book() 刪delete_book() 改modify_book() 查check_book() 實現吧! **************************/ #include<stdio.h>//裡
用C語言寫的一個順序表
//自己寫的順序表的實現方式 /**********需求************ *************************** 模擬一種場景,圖書管理系統 *************************** Function: 增add_book() 刪delete_book()
用C語言寫的一個最短作業優先排程演算法
#include <stdio.h> //定義一個結構體 struct sjf{ char name[10]; //程序名 float arrivetime; //到達時間 float servicetime;//服務時間 float starttime; //開
(資料結構作業)用C語言寫的一個迷宮
編譯環境:win8.1+VS2015 說明:這是資料結構學完棧和佇列寫的作業。利用隨機數生成一張迷宮圖,然後用佇列找出最短路徑,用棧輸出之。可以動態顯示最短路徑喔~~~最後,這個作業用了檔案分離寫(標頭檔案宣告,.cpp檔案定義)。 Last but not
用html語言寫一個功課表
ble mage ima http jsb type 聲明 mil .net 今天在網上看了一個關於html的教程,主要是講表格,看完之後認為有必要上機試試。於是就寫了以下的一段代碼。 <!DOCTYPE html><!--貌似5.0的能
用python語言寫一個簡單的計算器
ali pla ket 列表 調用 語言 括號 lac 跳出循環 假如我們有這樣一個式子: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )思
自己用C語言寫RL78 serial bootloader
瞭解更多關於bootloader 的C語言實現,請加我QQ: 1273623966 (驗證資訊請填 bootloader),歡迎諮詢或定製bootloader(線上升級程式)。 之前用C實現過多款PIC微控制器的bootloader, 包括8-bit的PIC16,PIC18;16-bit的P
懶癌晚期學圖論的時候自己用C語言寫了個求可達性矩陣的演算法~
可達性矩陣演算法~ 直接上程式碼 #include <iostream> #include <cstring> using namespace std; #define n 5 void print(int a[n][n]); void print1(int a[n][n]); v
用c語言實現一個簡單的通訊錄
通訊錄的c語言實現原始碼 簡單通訊錄的實現還是包括三個原始檔,test.c(實現通訊錄主邏輯),txl.c(實現用到的各個函式),txl.h(存放txl中用到的各種標頭檔案與宣告)。 txl.h #ifndef __TXL_H__//**txl.h** #defi
c語言模擬實現順序表的所有介面
順序表的c語言實現 此專案建立了3個原始檔,test.h用來建立結構體和函式的宣告,main.c用來實現函式,test.c用來實現順序表的總邏輯。 test.h #include<stdio.h> #include<assert.h> #include&
C語言實現靜態順序表
實現順序表分為以下幾步: 1.先寫出封裝順序表結構的結構體; 2.初始化順序表; 3.增刪查改; 4.順序表的逆置等。 #define MAX_SIZE 100 typedef int DataType; typedef struct SeqList { DataType d
用C語言列印一個空心圓
演算法分析: 利用x ^ 2 + y ^ 2 = R ^ 2可以算出圓上每一點行和列的對應關係。 程式碼: #include<stdio.h> #include<math.h> int main() { int x, m; double y; for