在乙個小型圖書館系統的讀者管理分系統中,乙個讀者的資訊包括讀者的id,姓名(name)和所借閱的圖書(book),假設每個讀者只允許借閱一本圖書(用書號表示),讀者列表可以用乙個順序表來實現。請按要求完成相應的函式。
首先輸入讀者個數n(0<=n<=10),並輸入n個讀者的資訊,包括id,姓名和所借閱書籍(以書號表示),資料之間以空格分隔。
然後,輸入命令編碼及所需資訊。詳見**及樣例輸入。
見樣例輸出。空表不輸出。
輸入示例
5
1000 aaa 1002
2000 bbb -1
3000 ccc 0
4000 ddd 4001
5000 eee 5001
2 0 6000 fff -1
2 6 6000 fff -1
3 73 1
4 1000 1000
4 2000 2000
4 3000 3000
5 6000
5 5000
1-1
#include #include #define namelen 20 // 名字陣列長度限制
#define mreader 10 // 讀者數量限制
typedef struct reader;
typedef struct readerlist;
// 根據使用者輸入,初始化n個讀者的列表readers
// 如果乙個讀者沒有借閱任何圖書,其編號用-1表示
// 該函式假設使用者輸入的資料是正確的
void init(readerlist &rlist, int n);
// 依次顯示所有讀者的資訊。
// 如果某讀者的id為1000,姓名為abc,借閱了編號為1001的圖書,
// 則該讀者的輸出資訊為:1000|abc|1001(分行符)
// 如果某讀者的id為1000,姓名為abc,沒有借閱圖書,
// 則該讀者的輸出資訊為:1000|abc|(分行符)
void displayall(readerlist &rlist);
// 將讀者r插入讀者列表rlist中的第i個位置(從1開始)
// 成功返回1,失敗返回0
int insert(readerlist &rlist, int i, reader r);
// 刪除讀者列表rlist中的第i個讀者(從1開始)
// 成功返回1,失敗返回0
int del(readerlist &rlist, int i);
// id為 "id" 的讀者借閱書號為 "book" 的圖書
// 成功返回1,失敗返回0
int borrow(readerlist &rlist, int id, int book);
// id為 "id" 的讀者歸還圖書
// 成功返回1,失敗返回0
int returnb(readerlist &rlist, int id);
int main()
} return 0;
}
#include #include #define namelen 20 // 名字陣列長度限制
#define mreader 10 // 讀者數量限制
typedef struct reader;
typedef struct readerlist;
// 根據使用者輸入,初始化n個讀者的列表readers
// 如果乙個讀者沒有借閱任何圖書,其編號用-1表示
// 該函式假設使用者輸入的資料是正確的
void init(readerlist &rlist, int n);
// 依次顯示所有讀者的資訊。
// 如果某讀者的id為1000,姓名為abc,借閱了編號為1001的圖書,
// 則該讀者的輸出資訊為:1000|abc|1001(分行符)
// 如果某讀者的id為1000,姓名為abc,沒有借閱圖書,
// 則該讀者的輸出資訊為:1000|abc|(分行符)
void displayall(readerlist &rlist);
// 將讀者r插入讀者列表rlist中的第i個位置(從1開始)
// 成功返回1,失敗返回0
int insert(readerlist &rlist, int i, reader r);
// 刪除讀者列表rlist中的第i個讀者(從1開始)
// 成功返回1,失敗返回0
int del(readerlist &rlist, int i);
// id為 "id" 的讀者借閱書號為 "book" 的圖書
// 成功返回1,失敗返回0
int borrow(readerlist &rlist, int id, int book);
// id為 "id" 的讀者歸還圖書
// 成功返回1,失敗返回0
int returnb(readerlist &rlist, int id);
int main()
} return 0;
}// ¸ù¾ýó㻧êäè룬³õê¼»¯n¸ö¶áõßµäáð±íreaders
// èç¹ûò»¸ö¶áõßã»óð½èôäèîºîí¼ê飬æä±àºåóã-1±íê¾
// ¸ãº¯êý¼ùéèó㻧êäèëµäêý¾ýêçõýè·µä
void init(readerlist &rlist, int n)
rlist.readers[i-1] = r;
++rlist.length;
return 1;
}// ³é¹¦·µ»ø1£¬ê§°ü·µ»ø0
int del(readerlist &rlist, int i)
rlist.length--;
return 1;
} // idîª "id" µä¶áõß½èôäêéºåîª "book" µäí¼êé
// ³é¹¦·µ»ø1£¬ê§°ü·µ»ø0
int borrow(readerlist &rlist, int id, int book)
else
}
} return 0; }
// idîª "id" µä¶áõ߹黹í¼êé
// ³é¹¦·µ»ø1£¬ê§°ü·µ»ø0
int returnb(readerlist &rlist, int id)
} }return 0;
}
讀者寫者問題 作業系統
動機 共享資料的訪問 兩種型別使用者 讀者 不需要修改資料 寫者 讀取和修改資料 問題的約束 允許同一時間有多個讀者,但在任何時候只有乙個寫者 當沒有寫者是讀者才能訪問資料 當沒有讀者和寫者時,寫者才能訪問資料 在任何時候只有乙個執行緒能操作共享變數 多個併發程序的資料集共享 rcount 有多少個...
作業系統 讀者 寫者問題
讀者間可以同時訪問資源 任一寫者必須與其他寫者或者讀者互斥訪問共享資源 分析 寫者與任一程序互斥訪問共享資源 讀者互斥訪問readcount變數 1申請對檔案的使用權p mutex 2寫檔案 3釋放對檔案的使用權v mutex 設正在讀的讀者個數readcount初 0 1第乙個讀者來 申請對檔案的...
作業系統 讀者寫者問題
乙個資料檔案或記錄可以被多個程序共享。唯讀的程序為 reader程序 其他程序為 writer程序 允許多個物件同時讀乙個共享物件,但是不允許乙個writer程序和其他reader程序同時共享物件。使用記錄性訊號量解決讀者與寫者問題 互斥訊號量wmutex 實現reader與writer程序間在讀或...