Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CSC3320-MiniLibrary

4 Topic 4. 15 points (Group, Implemented in C) Mini Library Create a system managing a mini library system. The users include borrower and librarian. Each user corresponds to a record (line) in a text file named “UserInfo.txt”. Each record consists of (User ID, First Name, Last Name, Account Name, Password, Role). The role ‘B’ represents borrower while ‘L’ represents librarian. Assume users’ information have been added to the file “UserInfo.txt” before the execution of the system.


UserInfo.txt 

1,First1 ,Last1, Acct1,1234,B 2,First2 ,Last2, Acct2, abcd,B 3,First3 ,Last3, Acct3, fffff,L

Every book corresponds to a record (line) in a text file named “mylibrary.txt”. Each record consists of 6 fields (Book ID, Title, Author, Possession, Check out Date, Due Date) separated by comma: Mylibrary.txt 1,Book1,Author1,Library,null,null 2,Book1,Author1,User1,2014-10-22,2014-11-21 3,Book2,Author2,User1,2014-10-23,2014-11-22 4,Book3,Author2,User2,2014-10-23,2014-11-22 5,Book4,Atuhor3,User2,2014-09-22,2014-10-22

l No comma “,”in title or author name. l This mini library keeps the record for each book in the library. Different books can share the book “Title”. But the “Book ID” for each book is unique. l One author may have multiple books. E.g. Both book2 and book3 are written by author1 l Possession field is “Library” means this book is kept in library, such as book #001. Otherwise, this book is checked out by the corresponding user. E.g. book #3 is checked out by User1. l A user is allowed to check out up to 3 books. l The “Checked out Date” field specifies the time of the latest checked out date. The loan period for each book is 30 days. “The Due Data” filed specifies the time the book should be returned. l This system asks the user to login by entering the correct account name and password.

If the user is a borrower, it provides a menu with following functionalities that the borrower can choose from at the top-level menu:

  1. Enter “q” for book query by author sorted by book title. • 1) Ask for author • 2) List records of all books written by this author sorted by the book title. 5 • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “s” for book status query by name • 1) Ask for book title. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) List the possession status of these books. If the book is available, report it is in library; otherwise, report the available date to borrow it (the due date for this book). e.g. 1 Book1 In library 2 Book1 Available after 2014-11-21 • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “u” to list books checked out by a given user • 1) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 4); otherwise, 2). • 2) List all books currently checked out by the given user. If the due date is passed, marked the record as “Over Due”. e.g. Assuming current date is 2014-12-01,for “User1” 2,Book1,Author1,User1,2014-10-22,2014-11-21 Over Due 3,Book2,Author2,User1,2014-10-23,2014-11-22 Over Due • 3) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step (1))

If the user is a librarian, it provides a menu with following functionalities that the librarian can choose from at the top-level menu:

  1. Enter “a” to add a book into library • 1) Ask for title (read). • 2) Ask for author. • 3) Generate a book ID by adding one to the current largest book ID. • 4) Add the record of the new book into library with generated book ID, title, author, possession=”library”, checked out date=”null” and due date=”null”. After that, print message “book*** added successfully!” and go to step 5). • 5) Provide options “t” for “Try again” and “b” for “Back to main menu”. (If “Try again”, go to step 1))

  2. Enter “d” to delete a book from library • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Remove the book with the given book ID from the library and then go to 4). • 4) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  3. Enter “o” to check out a book • 1) Ask for user name. • 2) Count how many books this user has already checked out, only proceed the current checkout if less than 3 (go to 3)). Otherwise, go to 5) • 3) Ask for book Id, examine if this book exists. If no, print a message “No such book!” and then go to 5). Otherwise, 4) • 4) Update the possession, “check out date” and “due date” field of the corresponding book record. After that, print message “book*** checked out successfully!” and then go to 5). • 5) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  4. Enter “r” to return a book • 1) Ask for book ID. • 2) Examine if this book exists. If no, print a message “No such book!” and then go to 4). Otherwise, 3) • 3) Ask for current date and check if it is a legal date. If illegal, output “illegal input date” and go to step 7); otherwise, 4). • 4) Check if current date has passed “Due Date”. If no, go to step 6). Otherwise, 5) • 5) Output the current fine to this book. • 6) Assume user has already paid for fine if it exists. Update the possession and date fields of the corresponding record. After that, print message “book*** return successfully!” and then go to 7). • 7) Provide options “t” for “Try again” or “b” for “Back to main menu”. (If “Try again”, go to step 1))

  5. Enter “x” to quit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors