EF core 做了一个简单的纯控制台借阅图书

环境:.net 5,Oracle 11g

ef core马上学完了,突然就想弄个东西玩玩,

具体实现了1用户登录 2翻页 3借书

由于一般都不使用外键所以我也没有使用,然后就是Fluent Api 和code first 。这是个纯控制台页面,具体往下看

1,登录及第一页展示,登录用的是手机号,正常11位,我这里随便弄了个,手机号也是用户Id,还有就是,如果输入不正确就会一直输入,给我输!!!

2,翻页展示,输入页数,就可以翻页,非法页数会显示警告

3,借书展示,被借的书状态会直接变成对应的手机号码

就很简单的功能,但是确实,看别人打好打,自己到用来一下午。

源码;

using System;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;

namespace 图书分页查询
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            using (LContext ctx = new LContext())
            {
                //LBook book1 = new LBook() {Name="C#入门到入土" };
                //LBook book2 = new LBook() {Name="A母猪产后护理" };
                //LBook book3 = new LBook() {Name= "C#.ASP.NET大成" };
                //LBook book4 = new LBook() {Name="C#项目实战" };
                //LBook book5 = new LBook() {Name= "计算机数据结构" };
                //LBook book6 = new LBook() {Name="计算机操作系统" };
                //LBook book7 = new LBook() {Name="富婆电话簿" };
                //LBook book8 = new LBook() {Name="富婆重金求子" };
                //LBook book9 = new LBook() {Name="A演员的自我修养" };
                //LBook book10 = new LBook() {Name="大话西游" };
                //LBook book11 = new LBook() {Name="大闹天宫" };
                //LBook book12 = new LBook() {Name="计算机网络" };
                //ctx.LBooks.Add(book1);  
                //ctx.LBooks.Add(book2);  
                //ctx.LBooks.Add(book3);  
                //ctx.LBooks.Add(book4);  
                //ctx.LBooks.Add(book5);  
                //ctx.LBooks.Add(book6);  
                //ctx.LBooks.Add(book7);  
                //ctx.LBooks.Add(book8);  
                //ctx.LBooks.Add(book9);  
                //ctx.LBooks.Add(book10);  
                //ctx.LBooks.Add(book11);  
                //ctx.LBooks.Add(book12);  
                //LUser user1 = new LUser() {PId=12138,Name="Root",PaW="12138" };
                //ctx.LUsers.Add(user1);
                //await ctx.SaveChangesAsync();   
                //数据插入结束

                var all_Us = ctx.LUsers;
                int user_Pid;
                string user_Paw;
                while (true)//用户的登录判断
                {
                    Console.WriteLine("请输入账号:");
                    user_Pid = int.Parse(Console.ReadLine());
                    Console.WriteLine("请输入密码:");
                    user_Paw = Console.ReadLine();
                    //取用户输入值
                    var _Pid = all_Us.Where(a => a.PId == user_Pid);
                    var _Paw = all_Us.Where(a => a.PaW == user_Paw);
                    if (_Pid == null || _Paw == null)
                        Console.WriteLine("重新输入");
                    else break;
                }
                var a = all_Us.Single(a => a.PId == user_Pid).Name;
                Console.WriteLine($"Welcome ++++++++{a}+++++++");
                Console.WriteLine("===================================================");
                // 登陆完成
                

              
                var all_lb = ctx.LBooks;
               // var all_lb5 = ctx.LBooks.Take(5);
                int page = 0;
                while (true)
                {
                    
                    var all_lb5 = ctx.LBooks.Skip(page*5).Take(5);
                    Console.WriteLine("-Id-|书名--------------|----状态 ");
                    Console.WriteLine("-------------------------------------");
                    foreach (var item in all_lb5)
                    {
                         Console.WriteLine($"{item.Id,4}|{padRightPro(item.Name, 18)}|        {item.St,7}");//使用自建padRightPro()方法对齐输出
                    }
                    Console.WriteLine("-------------------------------------");
                    //输出对齐表格完成

                    int all_page = (int)(Math.Ceiling(all_lb.ToList().Count * 1.0 / 5));
                    //for (int i = 0;i< all_page; i++)
                    Console.WriteLine();
                 
                    Console.WriteLine("当前在:第-【{0}】-页     共-【{1}】-页",page+1,all_page);
                    Console.WriteLine();
                    if (page> all_page-1||page<0)
                    {
                        Console.WriteLine("!!!!!!!!ERROR!!!!!!!!!没有此页");
                    }
                    Console.Write("请输入要跳转的页数(或者输入J+书的Id,借书):");
                    //设置目录完成

                   string  request = Console.ReadLine();//读取下一步指令
                    /*if (int.TryParse(request, out int page1))//如果是数值,则是翻页
                    {
                        page = page1 - 1;
                    }*/
                    if (!request.Contains("J"))//如果是数值,则是翻页
                    {
                        page = int.Parse(request) - 1;
                    }
                    else//如果有J则是借书
                    {
                        string result = System.Text.RegularExpressions.Regex.Replace(request,@"[^\d.\d]", "");
                       /*使用此方法,对字符串进行正则表达式匹配,取出数字*/
                        int result1;
                        int.TryParse(result,out  result1);
                        Console.WriteLine(result);
                        
                        var upd_St =ctx.LBooks.SingleOrDefault(a =>a.Id== result1);
                        upd_St.St= user_Pid;
                        await ctx.SaveChangesAsync();   
                    }
                    //借书完成呢

                    //Console.Write(page);
                    Console.WriteLine();
                }
               



            }

         
            static string padRightPro(string str, int totalLength)
            {
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);/*使用GB2312需要安装包System.Text.Encoding.CodePages
                                                                               * 并且使用Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                                                                               * 进行注册,才可以使用GB2312
                                                                               */

                Encoding encoding = Encoding.GetEncoding("gb2312");
                int cCount = 0;
                foreach (var ch in str.ToCharArray())
                {
                    if (encoding.GetByteCount(ch.ToString()) == 2)
                    { cCount++; }// 所有长度为2的就是中文,一个中文记一次
                }

                //Console.WriteLine(cCount);
                string w = str.PadRight(totalLength - cCount);/*限定长度时所有中文长度减一*/
                return w;
            }//从网上超来的,用于中英文混杂字符串输出限定长度,用于对齐
        }
    }
}

两个实体;

上下文类,只有个ORacle连接字符串,Config类中,加了点列的要求,就懒得放出来了

收获;

1,页面因为书名是中英文混杂,所以不好对齐,从网上找到了自定义的对齐方法加上了

2,深刻了解了,输出里面的左对齐(padLeft),右对齐(padright)

3,学会了剔除字符串; System.Text.RegularExpressions.Regex.Replace(request,@"[^\d.\d]", "")

4,不要一直用int.prase(),会报错的,应该用int.tryparse()

5,代码真的难打

不足;

1,密码需要保护,正常时要加密的,还没做

2,防止注入漏洞攻击,没有

3,状态列,应该加入并发控制,防止一块多人借同一本书,没加

4,这相当于,简易的用户界面,注册功能没加,哦,删除也没有

5,图书需要被搜索,搜索功能,模糊查询功能没加

6,还有可能悠然需要查没有被借出的书,这只需要状态=0,就行了,没加。同理,看被借出的书,状态 >0,就行了。

大概就这些了,我是真的很想加上这些功能,可是只能等到后天了,因为明天鸣潮公测了。含泪打游戏T~T。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值