What it sets out to do
Put the linked lists, file handling and modular design from coursework into a realistic business scenario, and check whether those fundamentals can genuinely carry a complete system.
A C++11 command-line management system that uses no standard library containers: vehicles, customers and rental records are all organised as singly linked lists, data is persisted to binary files, and the program ships with statistical summaries, ASCII bar charts and an operation log.
The system is built around seven modules — vehicle information, rental customers, renting and returning, information queries, statistics, and system settings. Every data structure is a hand-written singly linked list; no vector or map is involved. Data is written to disk in a custom binary format that restores completely after a restart.
Put the linked lists, file handling and modular design from coursework into a realistic business scenario, and check whether those fundamentals can genuinely carry a complete system.
The program revolves around car_rent.cpp, which gathers all constants, structs, list operations and business logic, while seven menu modules provide the individual entry points. Submodules are pulled in with #include, so the build only handles main.cpp as a translation unit.
C++11 with constexpr and nullptr, depending only on cstdio, cstdlib, cstring and ctime; Make and CMake builds are both supported; the interface and comments are in Chinese with UTF-8 encoding.
This is a course design project with a command-line interface, and data lives in local files rather than a database. Concurrent access and multi-user scenarios sit outside its design scope.
From data maintenance to business transactions, statistics and system administration, the modules are tied together by shared linked-list data.
Create, edit, delete and view vehicle records, maintaining the base data for rentable cars.
Maintain renter information that later rental and return transactions refer back to.
Handle rental and return transactions, validating vehicle status and updating both sides of the record.
Categorical queries and fuzzy search locate records quickly by vehicle, customer or transaction criteria.
Group and summarise by dimension, rendered as ASCII bar charts so the distribution of the data is visible at a glance.
Password and login handling, report export, the operation log and data clearing round out administration.
The project makes conscious trade-offs around data structures and persistence.
Every node is allocated with new and released with delete; insertion, removal and traversal are all written by hand as a complete exercise in list and pointer work.
Data is written to file in a custom binary layout and restored in the same layout on read, sidestepping the cost and ambiguity of text parsing.
Dates, identifiers and duplicate records are checked so that invalid input cannot corrupt the list structure or the statistics.
The core logic sits in one cpp file with submodules pulled in through #include, making it easy to read line by line during coursework review.
Bar charts are drawn with plain characters rather than a graphics library, so statistics still render in a pure command-line environment.
Key actions leave a trail, making data changes easy to trace.