2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. समस्यावर्णनम् : १.
पुस्तकालये बहु सामग्रीः अस्ति यदि सामग्रीनां प्रसारणं वर्गीकृत्य प्रबन्धनं कर्तुं शक्यते तर्हि तत् बहु सुविधां आनयिष्यति अतः मीडिया पुस्तकालयप्रबन्धनव्यवस्थायाः आवश्यकता वर्तते। पुस्तकालये पुस्तकानि, भिडियो-सीडी, चित्राणि च इति त्रयः प्रमुखाः सामग्रीवर्गाः सन्ति । एतेषां त्रयाणां प्रकाराणां सामान्यगुणाः सन्ति- संख्या, शीर्षकम्, लेखकः, रेटिंग् (अनरेटिङ्ग्, सामान्याः प्रौढाः, बालकाः) इत्यादयः । तेषु पुस्तकवर्गे प्रकाशकः, ISBN सङ्ख्या, पृष्ठसङ्ख्या च इत्यादीनां सूचनाः योजिताः सन्ति; कार्यस्य दीर्घता विस्तारश्च (सेन्टीमीटर्, पूर्णाङ्केषु) अन्यसूचना च । पाठकः - मूलभूतसूचना, ऋणं ग्रहीतुं उपलब्धानां पुस्तकानां संख्या प्रशासकः ऋणग्रहणाय उत्तरदायी
(1) वस्तूनि योजयन्तु : मुख्यतया पुस्तकालये त्रिविधवस्तूनाम् सूचनानां योजनं पूर्णं कुर्वन्तु, यत्र अद्वितीयसङ्ख्यानां आवश्यकता भवति। यदा द्वितीयकं सङ्ख्या योजितं भवति तदा द्वितीयकं दत्तांशं योजयितुं योजनं रद्दं कर्तुं च प्रेरयति: वस्तूनि पृच्छन्तु वस्तूनि पृच्छितुं त्रयः उपायाः सन्ति, यथा: शीर्षकेण प्रश्नः: शीर्षकं प्रविशन्तु, पृष्टा सूचना च निर्गच्छन्ति, यदि अभिलेखः नास्ति, तर्हि ततः "इदं शीर्षकं + विद्यते!" श्रेणीं कृत्वा पृष्टा सूचना निर्गच्छति, यदि अभिलेखः नास्ति तर्हि "अस्मिन् वर्गे कोऽपि वस्तूनि नास्ति!"
(2) Display item library: वर्तमान item library मध्ये सर्वाणि item information output, प्रत्येकं record एकां रेखां धारयति।
(3) सम्पादनवस्तूनि : प्रश्नपरिणामानां अनुसारं तत्सम्बद्धानि अभिलेखानि परिवर्तयितुं शक्यन्ते परिवर्तनं कुर्वन् संख्यायाः विशिष्टतायाः विषये ध्यानं दत्तव्यम्।
(4) द्रव्यं विलोपयन्तु : मुख्यतया पुस्तकालयस्य द्रव्यसूचनायाः विलोपनं सम्पूर्णं कुर्वन्तु। यदि वर्तमानं द्रव्यपुस्तकालयं रिक्तं भवति तर्हि "वस्तुपुस्तकालयः रिक्तः अस्ति!" न तु मदपुस्तकालये, "एषा संख्या नास्ति" इति प्रॉम्प्ट् करिष्यति ।
(५) ऋणं गृहीत्वा प्रशासकः पाठकेभ्यः वस्तूनि ऋणं दातुं, दत्तांशं सञ्चिकासु रक्षितुं च उत्तरदायी भवति ।
(6) सांख्यिकीयसूचना वर्तमानवस्तूनाम् पुस्तकालये कुलवस्तूनाम् संख्यां निर्गच्छति, द्रव्यवर्गेण च, पर्वतात् पूर्वं द्रव्येषु प्रत्येकस्य वर्गस्य वस्तूनाम् संख्यां गणयति, तान् प्रदर्शयति च
(7) Item save: वर्तमानप्रोग्रामे मदस्य सूचनां सञ्चिकायां रक्षन्तु।
(8) मदं पठन्तु तथा च सञ्चिकातः कार्यक्रमे मदसूचना पठन्तु। कोडस्य विकासानन्तरं भवद्भिः तस्य परीक्षणं करणीयम् यदि त्रुटिः निवेदिता अस्ति तर्हि सर्वाणि कार्याणि सामान्यतया चालयितुं शक्नुवन्ति इति सुनिश्चित्य तत् परिवर्तयन्तु ।
- #include <iostream>
- #include <vector>
- #include <string>
- #include <fstream>
- #include <unordered_map>
- #include <windows.h>
- using namespace std;
-
- enum Rating { UNRATED, ADULT, CHILD };
-
- string ratingToString(Rating rating) {
- switch (rating) {
- case UNRATED: return "未评级";
- case ADULT: return "成人";
- case CHILD: return "儿童";
- default: return "";
- }
- }
-
- class Media {
- public:
- int id;
- string title;
- string author;
- Rating rating;
-
- Media(int id, string title, string author, Rating rating)
- : id(id), title(title), author(author), rating(rating) {}
-
- virtual void display() const {
- cout << "ID: " << id << ", 标题: " << title << ", 作者: " << author << ", 评级: " << ratingToString(rating) << endl;
- }
-
- virtual ~Media() {}
- };
-
- class Book : public Media {
- public:
- string publisher;
- string isbn;
- int pages;
-
- Book(int id, string title, string author, Rating rating, string publisher, string isbn, int pages)
- : Media(id, title, author, rating), publisher(publisher), isbn(isbn), pages(pages) {}
-
- void display() const override {
- Media::display();
- cout << "出版社: " << publisher << ", ISBN: " << isbn << ", 页数: " << pages << endl;
- }
- };
-
- class Video : public Media {
- public:
- string producer;
- int year;
- int duration;
-
- Video(int id, string title, string author, Rating rating, string producer, int year, int duration)
- : Media(id, title, author, rating), producer(producer), year(year), duration(duration) {}
-
- void display() const override {
- Media::display();
- cout << "出品者: " << producer << ", 年份: " << year << ", 时长: " << duration << " mins" << endl;
- }
- };
-
- class Picture : public Media {
- public:
- string nationality;
- int length;
- int width;
-
- Picture(int id, string title, string author, Rating rating, string nationality, int length, int width)
- : Media(id, title, author, rating), nationality(nationality), length(length), width(width) {}
-
- void display() const override {
- Media::display();
- cout << "国籍: " << nationality << ", 尺寸: " << length << "x" << width << " cm" << endl;
- }
- };
-
- class Library {
- unordered_map<int, Media*> mediaCollection;
-
- public:
- ~Library() {
- for (auto& pair : mediaCollection) {
- delete pair.second;
- }
- }
-
- void addMedia(Media* media) {
- if (mediaCollection.find(media->id) != mediaCollection.end()) {
- cout << "检测到重复的 ID, 未添加资料." << endl;
- delete media;
- return;
- }
- mediaCollection[media->id] = media;
- cout << "资料添加成功." << endl;
- }
-
- void queryByTitle(const string& title) {
- bool found = false;
- for (const auto& pair : mediaCollection) {
- if (pair.second->title == title) {
- pair.second->display();
- found = true;
- }
- }
- if (!found) cout << " 标题 "" << title << "" 不存在!" << endl;
- }
-
- void queryById(int id) {
- if (mediaCollection.find(id) != mediaCollection.end()) {
- mediaCollection[id]->display();
- } else {
- cout << " ID "" << id << "" 不存在!" << endl;
- }
- }
-
- void queryByType(const string& type) {
- bool found = false;
- for (const auto& pair : mediaCollection) {
- if ((type == "Book" && dynamic_cast<Book*>(pair.second)) ||
- (type == "Video" && dynamic_cast<Video*>(pair.second)) ||
- (type == "Picture" && dynamic_cast<Picture*>(pair.second))) {
- pair.second->display();
- found = true;
- }
- }
- if (!found) cout << "分类没有 "" << type << "" 找到!" << endl;
- }
-
- void displayAll() {
- if (mediaCollection.empty()) {
- cout << "数据库中没有相关资料." << endl;
- return;
- }
- for (const auto& pair : mediaCollection) {
- pair.second->display();
- }
- }
-
- void editMedia(int id, Media* newMedia) {
- if (mediaCollection.find(id) == mediaCollection.end()) {
- cout << " ID "" << id << "" 不存在!" << endl;
- delete newMedia;
- return;
- }
- delete mediaCollection[id];
- mediaCollection[id] = newMedia;
- cout << "资料编辑成功." << endl;
- }
-
- void deleteMedia(int id) {
- if (mediaCollection.find(id) == mediaCollection.end()) {
- cout << " ID "" << id << "" 不存在!" << endl;
- return;
- }
- delete mediaCollection[id];
- mediaCollection.erase(id);
- cout << "资料删除成功." << endl;
- }
-
- void saveToFile(const string& filename) {
- ofstream file(filename, ios::binary);
- if (!file) {
- cout << "无法打开文件进行写入." << endl;
- return;
- }
- for (const auto& pair : mediaCollection) {
- Media* media = pair.second;
- file.write((char*)&media->id, sizeof(media->id));
- size_t length = media->title.size();
- file.write((char*)&length, sizeof(length));
- file.write(media->title.c_str(), length);
- length = media->author.size();
- file.write((char*)&length, sizeof(length));
- file.write(media->author.c_str(), length);
- file.write((char*)&media->rating, sizeof(media->rating));
-
- if (Book* book = dynamic_cast<Book*>(media)) {
- char type = 'B';
- file.write(&type, sizeof(type));
- length = book->publisher.size();
- file.write((char*)&length, sizeof(length));
- file.write(book->publisher.c_str(), length);
- length = book->isbn.size();
- file.write((char*)&length, sizeof(length));
- file.write(book->isbn.c_str(), length);
- file.write((char*)&book->pages, sizeof(book->pages));
- } else if (Video* video = dynamic_cast<Video*>(media)) {
- char type = 'V';
- file.write(&type, sizeof(type));
- length = video->producer.size();
- file.write((char*)&length, sizeof(length));
- file.write(video->producer.c_str(), length);
- file.write((char*)&video->year, sizeof(video->year));
- file.write((char*)&video->duration, sizeof(video->duration));
- } else if (Picture* picture = dynamic_cast<Picture*>(media)) {
- char type = 'P';
- file.write(&type, sizeof(type));
- length = picture->nationality.size();
- file.write((char*)&length, sizeof(length));
- file.write(picture->nationality.c_str(), length);
- file.write((char*)&picture->length, sizeof(picture->length));
- file.write((char*)&picture->width, sizeof(picture->width));
- }
- }
- cout << "数据保存到文件." << endl;
- }
-
- void loadFromFile(const string& filename) {
- ifstream file(filename, ios::binary);
- if (!file) {
- cout << "无法打开文件进行读取." << endl;
- return;
- }
- while (file.peek() != EOF) {
- int id;
- file.read((char*)&id, sizeof(id));
-
- size_t length;
- file.read((char*)&length, sizeof(length));
- string title(length, ' ');
- file.read(&title[0], length);
-
- file.read((char*)&length, sizeof(length));
- string author(length, ' ');
- file.read(&author[0], length);
-
- Rating rating;
- file.read((char*)&rating, sizeof(rating));
-
- char type;
- file.read(&type, sizeof(type));
-
- if (type == 'B') {
- file.read((char*)&length, sizeof(length));
- string publisher(length, ' ');
- file.read(&publisher[0], length);
-
- file.read((char*)&length, sizeof(length));
- string isbn(length, ' ');
- file.read(&isbn[0], length);
-
- int pages;
- file.read((char*)&pages, sizeof(pages));
-
- mediaCollection[id] = new Book(id, title, author, rating, publisher, isbn, pages);
- } else if (type == 'V') {
- file.read((char*)&length, sizeof(length));
- string producer(length, ' ');
- file.read(&producer[0], length);
-
- int year, duration;
- file.read((char*)&year, sizeof(year));
- file.read((char*)&duration, sizeof(duration));
-
- mediaCollection[id] = new Video(id, title, author, rating, producer, year, duration);
- } else if (type == 'P') {
- file.read((char*)&length, sizeof(length));
- string nationality(length, ' ');
- file.read(&nationality[0], length);
-
- int length, width;
- file.read((char*)&length, sizeof(length));
- file.read((char*)&width, sizeof(width));
-
- mediaCollection[id] = new Picture(id, title, author, rating, nationality, length, width);
- }
- }
- cout << "从文件加载的数据." << endl;
- }
-
- void countItems() {
- cout << "Total items: " << mediaCollection.size() << endl;
- int books = 0, videos = 0, pictures = 0;
- for (const auto& pair : mediaCollection) {
- if (dynamic_cast<Book*>(pair.second)) books++;
- else if (dynamic_cast<Video*>(pair.second)) videos++;
- else if (dynamic_cast<Picture*>(pair.second)) pictures++;
- }
- cout << "Books: " << books << ", Videos: " << videos << ", Pictures: " << pictures << endl;
- }
- };
-
- int main() {
- SetConsoleOutputCP(65001);
- Library library;
- while (true) {
- cout << "欢迎使用图书馆资料管理系统: n1. 添加资料n2. 按标题查询资料n3. 按ID查询资料n4. 按类别查询资料n5. 显示所有资料n6. 编辑资料n7. 删除资料n8. 资料存盘n9. 读取资料n10. 统计资料n11. 退出n";
- int choice;
- cin >> choice;
-
- if (choice == 1) {
- cout << "选择类别: 1. 图书 2. 视频 3. 图画n";
- int type;
- cin >> type;
- int id;
- string title, author;
- int rating;
- cout << "输入ID: ";
- cin >> id;
- cout << "输入标题: ";
- cin.ignore();
- getline(cin, title);
- cout << "输入作者: ";
- getline(cin, author);
- cout << "输入评级 (0 未评级, 1 成人, 2 儿童): ";
- cin >> rating;
-
- if (type == 1) {
- string publisher, isbn;
- int pages;
- cout << "输入出版社: ";
- cin.ignore();
- getline(cin, publisher);
- cout << "输入ISBN: ";
- getline(cin, isbn);
- cout << "输入页数: ";
- cin >> pages;
- library.addMedia(new Book(id, title, author, static_cast<Rating>(rating), publisher, isbn, pages));
- } else if (type == 2) {
- string producer;
- int year, duration;
- cout << "输入出品者: ";
- cin.ignore();
- getline(cin, producer);
- cout << "输入出品年份: ";
- cin >> year;
- cout << "输入时长(分钟): ";
- cin >> duration;
- library.addMedia(new Video(id, title, author, static_cast<Rating>(rating), producer, year, duration));
- } else if (type == 3) {
- string nationality;
- int length, width;
- cout << "输入出品国籍: ";
- cin.ignore();
- getline(cin, nationality);
- cout << "输入长度(厘米): ";
- cin >> length;
- cout << "输入宽度(厘米): ";
- cin >> width;
- library.addMedia(new Picture(id, title, author, static_cast<Rating>(rating), nationality, length, width));
- }
- } else if (choice == 2) {
- string title;
- cout << "输入标题: ";
- cin.ignore();
- getline(cin, title);
- library.queryByTitle(title);
- } else if (choice == 3) {
- int id;
- cout << "输入ID: ";
- cin >> id;
- library.queryById(id);
- } else if (choice == 4) {
- string type;
- cout << "输入类别 (图书, 视频, 图画): ";
- cin.ignore();
- getline(cin, type);
- library.queryByType(type);
- } else if (choice == 5) {
- library.displayAll();
- } else if (choice == 6) {
- int id;
- cout << "输入要编辑资料的ID: ";
- cin >> id;
- cout << "选择新分类: 1. 图书 2. 视频 3. 图画n";
- int type;
- cin >> type;
- string title, author;
- int rating;
- cout << "输入新标题: ";
- cin.ignore();
- getline(cin, title);
- cout << "输入新作者: ";
- getline(cin, author);
- cout << "输入新评级 (0 未评级, 1 成人, 2 儿童): ";
- cin >> rating;
-
- if (type == 1) {
- string publisher, isbn;
- int pages;
- cout << "输入新的出版社: ";
- cin.ignore();
- getline(cin, publisher);
- cout << "输入新的ISBN: ";
- getline(cin, isbn);
- cout << "输入新的页数: ";
- cin >> pages;
- library.editMedia(id, new Book(id, title, author, static_cast<Rating>(rating), publisher, isbn, pages));
- } else if (type == 2) {
- string producer;
- int year, duration;
- cout << "输入新的作者: ";
- cin.ignore();
- getline(cin, producer);
- cout << "输入新的年份: ";
- cin >> year;
- cout << "输入新的持续时间(分钟): ";
- cin >> duration;
- library.editMedia(id, new Video(id, title, author, static_cast<Rating>(rating), producer, year, duration));
- } else if (type == 3) {
- string nationality;
- int length, width;
- cout << "输入新国籍: ";
- cin.ignore();
- getline(cin, nationality);
- cout << "输入新长度(厘米): ";
- cin >> length;
- cout << "输入新宽度(厘米): ";
- cin >> width;
- library.editMedia(id, new Picture(id, title, author, static_cast<Rating>(rating), nationality, length, width));
- }
- } else if (choice == 7) {
- int id;
- cout << "输入要删除的资料ID: ";
- cin >> id;
- library.deleteMedia(id);
- } else if (choice == 8) {
- string filename;
- cout << "输入文件名: ";
- cin.ignore();
- getline(cin, filename);
- library.saveToFile(filename);
- } else if (choice == 9) {
- string filename;
- cout << "输入文件名: ";
- cin.ignore();
- getline(cin, filename);
- library.loadFromFile(filename);
- } else if (choice == 10) {
- library.countItems();
- } else if (choice == 11) {
- break;
- } else {
- cout << "无效的选择,请再试一次." << endl;
- }
- }
-
- return 0;
- }
प्रवेशः : १.
सांख्यिकी : १.
जिज्ञासा : १.