基于二叉查找树的图书影碟租赁管理系统c#实现(控制台)

程序功能:

  1. 提供管理员和客户登录,管理员可创建管理员和客户账号
  2. 管理员可录入图书(影碟),删除图书(影碟),查询客户电话
  3. 客户可借阅和归还图书(影碟),查询展示所有图书(影碟)信息,查询最近借阅的图书(影碟),查询最高借阅图书(影碟)TOP10榜单
  4. 所有上述操作产生的信息都将在退出时格式化存储在文件中,并在运行程序时重新加载,故不会丢失信息。

程序实现:

  1. 采用面向对象思想,对图书(影碟)和员工顾客都进行了抽象
  2. 封装了MemberCollection类,从而实现员工和顾客的一些操作
  3. 封装了图书(影碟)类,从而实现了对图书(影碟)的一些操作。
  4. 有关图书影碟信息的存储修改查询增加都使用了二叉查找树的数据结构,并使用了二叉查找树的增删改查。
  5. 经过反复调试测试优化使用逻辑和界面,几乎无bug。
    注意:程序运行根目录需要两个文件分别为DVDsinfo.txt,staffInfo.txt,并请在staffInfo.txt里写入如下格式内容作为管理员初始账号(注意有个换行):
li 1234

程序运行部分截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序源码:
在这里插入图片描述

using Microsoft.SqlServer.Server;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Runtime.Remoting.Messaging;
using System.Security.AccessControl;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace community_library_chsarp
{
    class showmenu
    {
        public static void showmainmenu()
        {
            string str = @"  
welcome to the Community Library

================================
1.Staff Login
2.Member Login
0.Exit
================================

Please make a selection (1-2,or 0 to exit);";
            Console.Write(str);
        }
        public static void showsubmenu1()
        {
            string str = @"
===============Staff Menu============
1.Add a new movie DVD
2.Remove a movie DVD
3.Register a new Member
4.Find a registered member's phone number
0.Return to main menu
======================================

Please make a selection (1-4,or 0 to return to main menu);";
            Console.Write(str);
        }
        public static void showsubmenu2()
        {
            string str = @"
==============Member Menu==============
1.Display all movies
2.Borrow a movie DVD
3.Return a movie DVD
4.List current borrowed movie DVDS
5.Display top 10 most popular movies
0.Return to main menu
=======================================

Please make a selection (1-5,or 0 to return to main menu);";
            Console.Write(str);
        }
        public static void showaddstaff()
        {
            string str = @"
==============ADD Staff Or Customer==============
1.ADD a staff
2.ADD a customer
0.Return to main menu
=======================================

Please make a selection (1-2,or 0 to return to main menu);";
            Console.Write(str);
        }
        public static void showregistmenu()
        {
            string str = @"
==============Register Menu==============
1.Register for a Satff
2.Register for a Customer
0.Return to last menu
=======================================

Please make a selection (1-2,or 0 to return to last menu);";
            Console.Write(str);
        }
    }
    public class DVD
    {
        public bool isborrowed
        {
            get;
            set;
        }
        public DateTime borrowdate
        {
            get;
            set;
        }
        public DateTime returndate
        {
            get;
            set;
        }
        public Dictionary<DateTime, DateTime> borrowrecord;
        public int borrowcount
        {
            get;
            set;
        }
        public string name
        {
            get;
            set;
        }
        public int id
        {
            get;
            set;
        }
        public DVD(string n, int i)
        {
            name = n;
            id = i;
            isborrowed = false;
            borrowdate = new DateTime();
            borrowrecord = new Dictionary<DateTime, DateTime>();
        }
        public DVD(string n, int i, string borrowinfo)
        {
            name = n;
            id = i;
            try
            {
                int mill = 0;
                string[] info = borrowinfo.Split(';');
                borrowrecord = new Dictionary<DateTime, DateTime>();
                for (int j = 0; j < info.Length - 1; j++)
                {
                    int byear = int.Parse(info[j].Split('-')[0].Split(':')[0]);
                    int bmonth = int.Parse(info[j].Split('-')[0].Split(':')[1]);
                    int bday = int.Parse(info[j].Split('-')[0].Split(':')[2]);
                    int ryear = int.Parse(info[j].Split('-')[1].Split(':')[0]);
                    int rmonth = int.Parse(info[j].Split('-')[1].Split(':')[1]);
                    int rday = int.Parse(info[j].Split('-')[1].Split(':')[2]);
                    if (ryear==1975&& rmonth==12&& rday==1)
                    {
                        isborrowed = true;
                    }
                    borrowrecord.Add(new DateTime(byear, bmonth, bday,1,1,1,mill++), new DateTime(ryear, rmonth, rday, 1, 1, 1, mill));
                }
            }
            catch (Exception)
            {
                throw new Exception();
            }
        }

    }
    public class BTnode
    {
        //节点本身的数据
        public DVD data;
        //左孩子
        public BTnode left;
        //右孩子
        public BTnode right;
        public BTnode(DVD d)
        {
            data = d;
            left = right = null;
        }
    }
    public class BinaryTreeDVD
    {

        public static void Insert(BTnode newBTnode,  ref BTnode rootDVD)
        {


            //如果为空树,则插入根节点
            if (rootDVD == null)
            {
                rootDVD = newBTnode;
            }
            //否则找到合适叶子节点位置插入
            else
            {
                BTnode Current = rootDVD;
                while (true)
                {
                    BTnode Parent = Current;
                    if (newBTnode.data.id < Current.data.id)
                    {
                        Current = Current.left;
                        if (Current == null)
                        {
                            Parent.left = newBTnode;
                            //插入叶子后跳出循环
                            break;
                        }
                    }
                    else
                    {
                        Current = Current.right;
                        if (Current == null)
                        {
                            Parent.right = newBTnode;
                            //插入叶子后跳出循环
                            break;
                        }
                    }
                }
            }
        }
        public static int borrowsum(DVD d)
        {
            if (d.borrowrecord != null)
            {
                return d.borrowrecord.Count;
            }
            return -1;
        }
        public static void Findtop10(BTnode theRoot,ref List<DVD> l)
        {

            if (theRoot != null)
            {
                if (l.Count == 0)
                    l.Add(theRoot.data);
                else
                {
                    if (borrowsum(theRoot.data) > borrowsum(l[l.Count - 1]))
                        l.Add(theRoot.data);
                    else
                    {
                        int i;
                        for ( i = 0; i < l.Count; i++)
                        {
                            if (borrowsum(theRoot.data) <= borrowsum(l[i]))
                                break;
                        }
                        l.Insert(i, theRoot.data);
                    }
                }
            }
            else
                return ;
            Findtop10(theRoot.left,ref l);
            Findtop10(theRoot.right, ref l);          
        }
        static string str = "";
        public static string PreOrder(BTnode theRoot, bool flag)
        {            
            Dictionary<DateTime, DateTime> dc;
            if (theRoot != null)
            {
                if (flag)
                {
                    Console.WriteLine("Nmae:" + theRoot.data.name + " id:" + theRoot.data.id + " " + (theRoot.data.isborrowed == true ? "borrowed" : "unborrowed"));
                }
                else
                {
                    str += theRoot.data.name + " " + theRoot.data.id +" ";
                    dc = theRoot.data.borrowrecord;                    
                    foreach (KeyValuePair<DateTime, DateTime> keyval in dc)
                    {

                        str +=keyval.Key.Year + ":" + keyval.Key.Month + ":" + keyval.Key.Day + "-";
                        str +=keyval.Value.Year + ":" + keyval.Value.Month + ":" + keyval.Value.Day + ";";
                    }                   
                    str += "\r\n";
                }
                PreOrder(theRoot.left, flag);
                PreOrder(theRoot.right, flag);
            }
            return str;
        }
        //找到最大节点
        public static BTnode FindMax(BTnode rootDVD)
        {
            BTnode current = rootDVD;
            //找到最右边的节点即可
            while (current.right != null)
            {
                current = current.right;
            }
            return current;

        }
        //找到最小节点
        public static BTnode FindMin(BTnode rootDVD)
        {
            BTnode current = rootDVD;
            //找到最左边的节点即可
            while (current.left != null)
            {
                current = current.left;
            }
            return current;
        }
        public static BTnode Search(int id, BTnode rootDVD)
        {
            BTnode current = rootDVD;
            while (true)
            {
                if (id < current.data.id)
                {
                    if (current.left == null)
                        break;
                    current = current.left;
                }
                else if (id > current.data.id)
                {
                    if (current == null)
                        break;
                    current = current.right;
                }
                else
                {
                    return current;
                }
            }
            if (current.data.id != id)
            {
                return null;
            }

            return current;

        }
        public static bool delete(BTnode root, int key)
        {
            Stack<BTnode> stack = new Stack<BTnode>();
            BTnode p = root, q;
            while (p != null)
            {
               // System.out.println(p.val);
                stack.Push(p);
                if (p.data.id == key)
                {
                    //删除节点的左右子树都为空 直接将父节点的该左子树或者右子树置空
                    if (p.left == null && p.right == null)
                    {
                        //System.out.println(" p.left==null&&p.right==null" + p.val);
                        if (stack.Count!=0)
                        {
                            stack.Pop();
                            q = stack.Peek();
                            if (q.left == p)
                            {
                                q.left = null;
                                return true;
                            }
                            else
                            {
                                q.right = null;
                                return true;
                            }
                        }
                        else
                        {
                            return false;
                        }
                        //左子树为空 将右子树直接放到父节点的删除节点位置上
                    }
                    else if (p.left == null && p.right != null)
                    {
                       // System.out.println(" p.left==null&&p.right!=null" + p.val);
                        if (stack.Count!=0)
                        {
                            stack.Pop();
                            q = stack.Peek();
                            if (q.left == p)
                            {
                                q.left = p.right;
                            }
                            else
                            {
                                q.right = p.right;
                            }
                        }
                        else
                        {
                            return false;
                        }
                        //右子树为空 左子树放到该节点位置上
                    }
                    else if (p.left != null && p.right == null)
                    {
                        //System.out.println(" p.left!=null&&p.right==null" + p.val);
                        if (stack.Count!=0 )
                        {
                            stack.Pop();
                            q = stack.Peek();
                            if (q.left == p)
                            {
                                q.left = p.left;
                            }
                            else
                            {
                                q.right = p.left;
                            }
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        //左右子树都不为空 将左子树节点放到右子树的最左边
                       // System.out.println(" p.left!=null&&p.right!=null" + p.val);
                        BTnode n = p.right;
                        while (n.left != null)
                        {
                            n = n.left;
                        }
                        if (!(stack.Count==0))
                        {
                            stack.Pop();
                            q = stack.Peek();
                            if (q.left == p)
                            {
                                q.left = p.right;
                                n.left = p.left;
                            }
                            else
                            {
                                q.right = p.right;
                                n.left = p.left;
                            }
                            return true;
                        }
                        else
                        {
                            return false;
                        }

                    }
                }
                else
                {
                    if (p.data.id > key)
                    {
                        p = p.left;
                    }
                    else
                    {
                        p = p.right;
                    }
                }
            }
            return false;
        }
        //删除二叉查找树中的节点,最麻烦的操作
        public static BTnode Delete(int key, BTnode rootDVD)
        {
            if(rootDVD==null)
            {
                return null;
            }
            BTnode parent = rootDVD;
            BTnode current = rootDVD;
            //首先找到需要被删除的节点&其父节点
            while (true)
            {
                if (key < current.data.id)
                {
                    if (current.left == null)
                        break;
                    parent = current;
                    current = current.left;
                }
                else if (key > current.data.id)
                {
                    if (current == null)
                        break;
                    parent = current;
                    current = current.right;
                }
                //找到被删除节点,跳出循环
                else
                {
                    break;
                }
            }
            //找到被删除节点后,分四种情况进行处理
            //情况一,所删节点是叶子节点时,直接删除即可
            if (current.left == null && current.right == null)
            {
                //如果被删节点是根节点,且没有左右孩子
                if (current == rootDVD && rootDVD.left == null && rootDVD.right == null)
                {
                    rootDVD = null;
                }
                else if (current.data.id < parent.data.id)
                    parent.left = null;
                else
                    parent.right = null;
            }
            //情况二,所删节点只有左孩子节点时
            else if (current.left != null && current.right == null)
            {
                if (current.data.id < parent.data.id)
                    parent.left = current.left;
                else
                    parent.right = current.left;


            }
            //情况三,所删节点只有右孩子节点时
            else if (current.left == null && current.right != null)
            {
                if (current.data.id < parent.data.id)
                    parent.left = current.right;
                else
                    parent.right = current.right;


            }
            //情况四,所删节点有左右两个孩子
            else
            {
                //current是被删的节点,temp是被删左子树最右边的节点
                BTnode temp;
                //先判断是父节点的左孩子还是右孩子
                if (current.data.id < parent.data.id)
                {

                    parent.left = current.left;
                    temp = current.left;
                    //寻找被删除节点最深的右孩子
                    while (temp.right != null)
                    {
                        temp = temp.right;
                    }
                    temp.right = current.right;


                }
                //右孩子
                else if (current.data.id > parent.data.id)
                {
                    parent.right = current.left;
                    temp = current.left;
                    //寻找被删除节点最深的左孩子
                    while (temp.left != null)
                    {
                        temp = temp.left;
                    }
                    temp.right = current.right;
                }
                //当被删节点是根节点,并且有两个孩子时
                else
                {
                    temp = current.left;
                    while (temp.right != null)
                    {
                        temp = temp.right;
                    }
                    temp.right = rootDVD.right;
                    rootDVD = current.left;
                }

            }
            return current;

        }
    }
    public class MovieCollection
    {

        static BTnode DVDROOT = null;
        public static BTnode initReadFromTXT()
        {
            StreamReader sr = new StreamReader("DVDsinfo.txt", Encoding.ASCII);
            string[] info = sr.ReadToEnd().Split('\r');
            DVD d;
            for (int i = 0; i < info.Length-1; i++)
                try
                {
                    string[] infos = info[i].Trim('\n').Split(' ');
                    if (infos.Length == 2)
                    {
                        d = new DVD(infos[0].Trim('\n'), int.Parse(infos[1].Trim('\n')));
                        BinaryTreeDVD.Insert(new BTnode(d),ref DVDROOT);
                    }
                    else if (infos.Length == 3)
                    {
                        d = new DVD(infos[0].Trim('\n'), int.Parse(infos[1].Trim('\n')), infos[2].Trim('\n'));
                        BinaryTreeDVD.Insert(new BTnode(d),  ref DVDROOT);
                    }
                    else
                    {
                        throw new Exception();
                    }                    
                }
                catch (Exception)
                {
                    Console.WriteLine("READ FILE FAILED!");
                    Console.ReadKey();
                    return null;
                }
            sr.Close();
            return DVDROOT;
        }
        public static bool WriteToTXT( BTnode btroot)
        {

            try
            {
                StreamWriter sw = new StreamWriter("DVDsinfo.txt", false, Encoding.ASCII);
                sw.Write(BinaryTreeDVD.PreOrder(btroot, false));                
                sw.Close();
            }
            catch ( Exception)
            {
                Console.WriteLine("WRITE FILE ERROR!SAVE FAILED! ");
                Console.ReadKey();
                return false;
            }
           return true;
        }
    }
    class staff
    {
        public string name
        {
            get;
            set;
        }
        public string pwd
        {
            get;
            set;
        }
        public staff(string n, string p)
        {
            name = n;
            pwd = p;
        }
    }
    class custom : staff
    {
        public string phone;
        public custom(string n, string p, string ph) : base(n, p)
        {
            phone = ph;
        }
        public custom(string n, string p):base(n,p)
        {
            phone = "";
        }
        public List<DVD> borrowed=new  List<DVD> ();
    }
    class MemberCollection
    {
       public static List<custom> mc=new  List<custom> ();
        public static bool addmem(string n, string p)
        {
            try
            {
                mc.Add(new custom(n, p));
            }
            catch (Exception)
            {
                Console.WriteLine("ADD staff FAILED!");
                Console.ReadKey();
                return false;
            }
            return true;
        }
        public static bool addmem(string n, string p, string ph)
        {
            try
            {
                mc.Add(new custom(n, p, ph));
            }
            catch (Exception)
            {
                Console.WriteLine("ADD custom FAILED!");
                Console.ReadKey();
                return false;
            }
            return true;
        }
        public static bool findphone(string name)
        {
            bool flag = false;
            foreach (custom c in mc)
            {
                if (c.name == name)
                {
                    flag = true;
                    Console.WriteLine("phone number is:" + c.phone);
                    Console.ReadKey();
                }
            }
            if (flag)
                return true;
            else
                return false;
        }
        public static void findborrowed(custom c)
        {
            foreach (DVD d in c.borrowed)
            {
                Console.WriteLine(d.name + " " + d.id);
            }
        }
        public static custom judgestaff(string n, string p)
        {            
            foreach (custom c in mc)
            {
                if (c.name == n && c.pwd.TrimEnd('\r') == p)
                {
                    return c;
                }
            }
            return null;
        }
        public static bool initstafffromTXT(BTnode btroot)
        {
            StreamReader sr;
            try
            {
                sr = new StreamReader("staffInfo.txt", Encoding.ASCII);
                string [] info = sr.ReadToEnd().Split('\r');
                for(int i=0;i<info.Length-1;i++)
                {
                    if(info[i].Split(' ').Length==3)
                    {
                        custom c = new custom(info[i].Trim('\n').Split(' ')[0], info[i].Trim('\n').Split(' ')[1]);
                        string[] borr = info[i].Trim('\n').Split(' ')[2].Split('-');
                        for (int j = 0; j<borr.Length - 1; j++)
                        {
                            c.borrowed.Add(BinaryTreeDVD.Search(int.Parse(borr[j]), btroot).data);
                        }
                        
                        mc.Add(c);
                    }
                    else if(info[i].Split(' ').Length == 4)
                    {
                        custom c = new custom(info[i].Trim('\n').Split(' ')[0], info[i].Trim('\n').Split(' ')[1], info[i].Trim('\n').Split(' ')[2]);
                        string[] borr = info[i].Trim('\n').Split(' ')[3].Split('-');
                        for (int j = 0; j < borr.Length - 1; j++)
                        {
                            c.borrowed.Add(BinaryTreeDVD.Search(int.Parse(borr[j]), btroot).data);
                        }

                        mc.Add(c);
                    }
                    else
                    {
                        return false;
                    }
                }
                sr.Close();
                return true;
            }
            catch (Exception)
            {
                return false; ;
            }

        }
        public static bool savestafffromTXT()
        {
            try
            {
                StreamWriter sw = new StreamWriter("staffInfo.txt", false, Encoding.ASCII);
                foreach (custom c in mc)
                {
                    if (c.phone == "")
                    {
                        sw.Write(c.name + " " + c.pwd+" ");                       
                    }
                    else
                    {
                        sw.Write(c.name + " " + c.pwd + " " + c.phone+" ");
                    }
                    foreach (DVD d in c.borrowed)
                    {
                        sw.Write(+d.id+"-");
                    }
                    sw.Write("\r\n");
                }                
                sw.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        class Program
        {

            static void Main(string[] args)
            {
                bool FLAG = false;                              
                BTnode btroot = MovieCollection.initReadFromTXT();
                if (!MemberCollection.initstafffromTXT(btroot))
                {
                    Console.WriteLine(" init failed,press any key to exit");
                    Console.ReadKey();
                    return;
                }
                    while (true)
                {
                    Console.Clear();
                    showmenu.showmainmenu();
                    int s;
                    try
                    {
                        s = int.Parse(Console.ReadLine());
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("input invalidly,input again!");
                        continue;
                    }
                    switch (s)
                    {
                        case 1:
                            {
                                string name, pwd;
                                Console.WriteLine("please input username or input # to return:");
                                name = Console.ReadLine();
                                if (name == "#")
                                {
                                    break;
                                }
                                Console.WriteLine("please input userpassword:");
                                pwd = Console.ReadLine();
                                custom c = MemberCollection.judgestaff(name, pwd);
                                if (c != null)
                                {
                                    while (true)
                                    {
                                        Console.Clear();
                                        showmenu.showsubmenu1();
                                        int s1;
                                        try
                                        {
                                            s1 = int.Parse(Console.ReadLine());
                                        }
                                        catch (Exception)
                                        {
                                            Console.WriteLine("Input invalidly,please input again!");
                                            break;
                                        }
                                        bool flag = false; ;
                                        switch (s1)
                                        {
                                            case 1:
                                                {
                                                    Console.WriteLine("please inupt name and id of movie,use space to split!inpu # to return");
                                                    try
                                                    {
                                                        string str = Console.ReadLine();
                                                        if (str == "#")
                                                            break;
                                                        string[] input = str.Split(' ');
                                                        BinaryTreeDVD.Insert(new BTnode(new DVD(input[0], int.Parse(input[1]))), ref btroot);
                                                        Console.WriteLine("ADD SUCCESS!");
                                                        Console.ReadKey();
                                                    }
                                                    catch (Exception)
                                                    {
                                                        Console.WriteLine("ADD FAILED!");
                                                        Console.ReadKey();
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;
                                            case 2:
                                                {
                                                    Console.WriteLine("please inupt the DVD's id!");
                                                    string str = Console.ReadLine();
                                                    if (str == "#")
                                                        break;
                                                    try
                                                    {
                                                        if (BinaryTreeDVD.delete( btroot,int.Parse(str)))
                                                        {
                                                            Console.WriteLine("REMOVE SUCCESS!");
                                                        }
                                                        else
                                                        {
                                                            Console.WriteLine("REMOVE FAILED!");
                                                        }    
                                                        Console.ReadKey();
                                                    }
                                                    catch (Exception)
                                                    {
                                                        Console.WriteLine("REMOVE FAILED!");
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;
                                            case 3:
                                                {
                                                    while (true)
                                                    {
                                                        string s11;
                                                        int pwd1,se=-1;
                                                        Console.Clear();
                                                        bool flag1 = false;
                                                        showmenu.showregistmenu();
                                                        try
                                                        {
                                                            se = int.Parse(Console.ReadLine());
                                                        }
                                                        catch
                                                        {
                                                            Console.WriteLine("input invalidly");
                                                            Console.ReadKey();
                                                            break;
                                                        }
                                                        switch (se)
                                                        {
                                                            case 1:
                                                                {
                                                                    Console.WriteLine("please input name and password,use space to split!");
                                                                    try
                                                                    {
                                                                        s11 = Console.ReadLine();
                                                                        pwd1 = int.Parse(s11.Split(' ')[1]);
                                                                        if (pwd1 > 999 && pwd1 < 10000)
                                                                        {
                                                                            MemberCollection.addmem(s11.Split(' ')[0], s11.Split(' ')[1]);
                                                                        }
                                                                        else
                                                                        {
                                                                            throw new Exception();
                                                                        }
                                                                    }
                                                                    catch (Exception)
                                                                    {
                                                                        Console.WriteLine("ADD FALIED!");                                                                        
                                                                        Console.ReadKey();
                                                                    }
                                                                }
                                                                break;
                                                            case 2:
                                                                {
                                                                    Console.WriteLine("please input name ,password and phonenumber,use space to split!");
                                                                    try
                                                                    {
                                                                        s11 = Console.ReadLine();
                                                                        pwd1 = int.Parse(s11.Split(' ')[1]);
                                                                        if (pwd1 > 999 && pwd1 < 10000)
                                                                        {
                                                                            MemberCollection.addmem(s11.Split(' ')[0], s11.Split(' ')[1], s11.Split(' ')[2]);
                                                                        }
                                                                        else
                                                                        {
                                                                            throw new Exception();
                                                                        }
                                                                    }
                                                                    catch (Exception)
                                                                    {
                                                                        Console.WriteLine("ADD FALIED!");
                                                                        Console.ReadKey();
                                                                    }
                                                                }
                                                                break;
                                                            case 0:
                                                                {
                                                                    flag1 = true;
                                                                }
                                                                break;
                                                        }
                                                        if (flag1)
                                                        {
                                                            break;
                                                        }
                                                    }
                                                }
                                                break;
                                            case 4:
                                                {
                                                    Console.WriteLine("please input name");
                                                    if (!MemberCollection.findphone(Console.ReadLine()))
                                                    {
                                                        Console.WriteLine("NOT FOUND");
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;
                                            case 0:
                                                {
                                                    flag = true;
                                                }
                                                break;
                                        }
                                        if (flag)
                                            break;
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("username or password is uncorrect!");
                                    Console.ReadKey();
                                }
                            }
                            break;
                        case 2:
                            {
                                Console.WriteLine("please input user name and password,use space to split!");
                                string input = Console.ReadLine();
                                custom c = null;
                                try
                                {
                                   c = MemberCollection.judgestaff(input.Split(' ')[0], input.Split(' ')[1]);
                                }
                                catch(Exception )
                                {
                                    Console.WriteLine("input invalidly");
                                    Console.ReadKey();
                                    break;
                                }
                                if (c != null)
                                {
                                    while (true)
                                    {
                                        Console.Clear();
                                        showmenu.showsubmenu2();
                                        bool flag2 = false;
                                        switch (int.Parse(Console.ReadLine()))
                                        {
                                            case 1:
                                                {
                                                    BinaryTreeDVD.PreOrder(btroot, true);
                                                    Console.ReadKey();
                                                }
                                                break;
                                            case 2:
                                                {
                                                    Console.WriteLine("input the id of movie");
                                                    try
                                                    {
                                                        int id = int.Parse(Console.ReadLine());
                                                        BTnode bt = BinaryTreeDVD.Search(id, btroot);
                                                        if (bt != null)
                                                        {
                                                            if (bt.data.isborrowed)
                                                            {

                                                                Console.WriteLine("borrowed!");
                                                                Console.ReadKey();
                                                            }
                                                            else
                                                            {
                                                                bt.data.borrowrecord.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second), new DateTime(1975, 12, 1));
                                                                bt.data.isborrowed = true;
                                                                c.borrowed.Add(new DVD(bt.data.name, bt.data.id));
                                                                Console.WriteLine("BORROW SUCEES!");
                                                                Console.ReadKey();
                                                            }
                                                        }
                                                        else
                                                        {
                                                            Console.WriteLine("NOT FOUND!");
                                                            Console.ReadKey();
                                                        }
                                                    }
                                                    catch(System.ArgumentException)
                                                    {                                                       
                                                        Console.ReadKey();
                                                    }
                                                    catch (Exception)
                                                    {
                                                        Console.WriteLine("NOT FOUND!");
                                                        Console.ReadKey();
                                                    }
                                                }
                                                break;
                                            case 3:
                                                {
                                                    Console.WriteLine("input the id of movie");
                                                    try
                                                    {
                                                        BTnode bt = BinaryTreeDVD.Search(int.Parse(Console.ReadLine()), btroot);
                                                        if (bt != null)
                                                        {
                                                            Dictionary<DateTime, DateTime> tmp =new Dictionary<DateTime, DateTime>( bt.data.borrowrecord);
                                                            bt.data.borrowrecord.Clear();
                                                            foreach(KeyValuePair<DateTime,DateTime> kvp in tmp)
                                                            {
                                                                if (kvp.Value.Year == 1975)
                                                                {

                                                                    bt.data.borrowrecord.Add(kvp.Key, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute,DateTime.Now.Second, DateTime.Now.Millisecond));
                                                                    bt.data.isborrowed = false;
                                                                }
                                                                else
                                                                {
                                                                    bt.data.borrowrecord.Add(kvp.Key,kvp.Value);
                                                                }
                                                            }                                                                                                                   
                                                            for (int i=0;i<c.borrowed.Count;i++)
                                                            {
                                                                
                                                                if(c.borrowed[i].id==bt.data.id)
                                                                c.borrowed.RemoveAt(i);
                                                            }
                                                            Console.WriteLine("RETURN SUCCESS!");
                                                            Console.ReadKey();
                                                        }
                                                        else
                                                        {
                                                            Console.WriteLine("NOT FOUND!");
                                                            Console.ReadKey();
                                                        }
                                                    }
                                                    catch (Exception)
                                                    {
                                                        Console.WriteLine("NOT FOUND!");
                                                        Console.ReadKey();
                                                    }
                                                }

                                                break;
                                            case 4:
                                                {
                                                    foreach (DVD d in c.borrowed)
                                                        Console.WriteLine("Nmae:" + d.name + " Id:" + d.id);
                                                    Console.ReadKey();
                                                }
                                                break;
                                            case 5:
                                                {
                                                    List<DVD> l = new List<DVD>();
                                                    BinaryTreeDVD.Findtop10(btroot,ref l);
                                                    l.Reverse();
                                                    for (int i = 0; i < 10 && i < l.Count; i++)
                                                    {
                                                        Console.WriteLine("name:" + l[i].name + " id:" + l[i].id + " times:" + BinaryTreeDVD.borrowsum(l[i]));
                                                    }
                                                    Console.ReadKey();
                                                }
                                                break;
                                            case 0:
                                                {
                                                    flag2 = true;
                                                }
                                                break;
                                        }
                                        if (flag2)
                                        {
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("username or password is uncorrect!");
                                    Console.ReadKey();
                                }
                            };
                            break;
                        case 0:
                            {
                                FLAG = true;
                            };
                            break;
                    }
                    if (FLAG)
                    {
                        MemberCollection.savestafffromTXT();
                        MovieCollection.WriteToTXT(btroot);
                        return;
                    }
                }
            }
        }
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
影碟出租管理系统是一个基于C语言的软件项目,旨在帮助影碟租赁店管理他们的库存,客户信息和出租记录。该系统可以在终端上运行,并提供一系列功能,包括添加新影碟到库存,查看当前库存情况,录入客户信息,处理租赁请求和生成出租记录。 该系统的主要功能包括: 1. 影碟库存管理:管理员可以添加新影碟到库存,查看当前库存情况,更新影碟信息和删除已经下架的影碟。 2. 客户信息管理:管理员可以录入客户信息,包括姓名、联系方式等,以便在出租时快速查询客户信息。 3. 租赁管理:系统可以处理租赁请求,包括检查影碟库存情况,计算租金金额,生成租赁记录等。 4. 出租记录管理:系统可以记录每一次租赁的详细情况,包括租赁时间、归还时间、租金金额等。 在开发这个系统时,需要考虑到用户友好的界面设计,以便店员可以轻松使用系统完成各项管理任务。另外,系统需要具备良好的数据存储和管理能力,以确保库存信息和客户信息的准确性和安全性。同时,系统还需要预留足够的扩展性,以便日后根据需要添加新的功能或模块。 总的来说,影碟出租管理系统是一个有益的软件项目,能够帮助影碟租赁店提高库存管理效率,简化租赁流程,提升客户服务质量。通过C语言开发这个系统,可以确保系统的稳定性和性能,同时也有利于培养学生对C语言程序设计的能力和熟练度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值