• C#中一道关于ADO.NET的基础练习题


    在控制台程序中实现以下功能:

    1. 构建3个表(程序启动时自动建立)  (20分):

    1) Employee 职工表 (工号、姓名、性别、年龄、部门)  (Num、Name、Sex、Age、Department)

    2) Wage工资表 (编号、工资金额)  (No、Amount)

    3) Attend出勤表 (工号、工资表编号、出勤数)  (Num、No、Attendance)

    2. 在程序初始化完成后,要求有以下四个选项和功能:

    1) 插入相关记录(通过指定文件内容批量导入数据、工号不能有重复)。 (20分)

    2) 查询工资为指定金额的职工工号和姓名。(10分)

    3) 查询出勤数为0的职工姓名和工号。(10分)

    4) 查询出勤数为10并且工资金额小于2500的职工信息。(10分)

    注意:

    a) 主键、外键关系通过代码建立、适当地考虑效率问题。(10分)

    b) 有相应的异常处理(最好有相应的Log输出)。(10分)

    c) 提示语合理、程序运行稳定。(10分)

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data; // State variables 
    using System.Globalization;
    using System.Data.SqlClient; // Date
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Linq.Expressions;
    
    namespace ADO.NETCheck
    {
        class Program
        {
            //用户输入值
            string userInput;
            //入口
            static void Main(string[] args)
            {
                Program p = new Program();
                p.InitDB();
                bool flag = true;
                while (flag) 
                {
               
                    if (p.MenuReturn() == true)
                    {
                        p.Action();
                    }
                    else
                    {
                        flag = false;
                    }
                }
            }
            //返回菜单的选择结果
            private bool MenuReturn()
            {
                //输入1添加员工信息——a
                Console.WriteLine("Enter a to add employee info——a");
                //输入2查询工资金额为指定金额的职工工号和姓名——b
                Console.WriteLine("Enter b to check the employee with the specific wage——b");
                //输入3查询出勤率为0的职工姓名和工号——c
                Console.WriteLine("Enter c to check the employee whose attendance=0——c");
                //输入4查询出勤率为10并且工资金额小于2500的职工信息——d
                Console.WriteLine("Enter d to check the employee whose attendance=10 and wage<=2500——d");
                //请输入(输入‘a’、‘b’、‘c’、‘d’以外的字符将退出程序)
                Console.Write("Please enter (words other than 'a','b','c','d' means quit):");
                string reg = "^[a,b,c,d]$";
                //ReadLine会自动从输入中刨除回车
                userInput = Console.ReadLine();
                if (Regex.IsMatch(userInput.ToString(), @reg))
                {
                    return true;
                }
                else 
                {
                    return false;
                }
            }
            //判断用户选择的操作
            private void Action()
            {
                if (userInput == "a") 
                {
                    AddEmployeeInfo();
                }
                if (userInput == "b") 
                {
                    Console.Write("Please enter the wage you want to check:");
                    string wageLimit = Console.ReadLine();
                    checkWage(wageLimit);
                }
                if (userInput == "c") 
                {
                    Console.Write("Please enter the attendance number you want to check:");
                    string attNumString = Console.ReadLine();
                    int attNum = int.Parse(attNumString);
                    checkAttend(attNum);
                }
                if (userInput == "d") 
                {
                    checkAttendAndWage();
                }
                
                Console.ReadKey();
            }
            //插入相关记录——a
            private void AddEmployeeInfo()
            {
                string connectionString = @"server=TYLAN_AIO;database=tylanDB;Trusted_Connection=True;";
                //生命周期开始自动回收
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    SqlCommand command = new SqlCommand();
                    command.Connection = connection;
                    //读取文件中的employee信息
                    string employeeReadPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\employees.txt";
                    var lines = File.ReadLines(@employeeReadPath);
                    List<string> txt = new List<string>();
                    foreach (var line in lines)
                    {
                        txt.Add(line);
                    }
                    txt.ForEach(t =>
                    {
                        string[] keyValues = t.Split(',');
                        //一定要注意严格遵守VALUES('','','')的格式不要忘记加单引号''
                        command.CommandText += "INSERT INTO Employee VALUES ('" + keyValues[0] + "','" + keyValues[1] + "','" + keyValues[2] + "','" + keyValues[3] + "','" + keyValues[4] + "') ";
                        try
                        {
                            command.ExecuteNonQuery();
                        }
                        catch (Exception ex)
                        {
                            WriteLog(ex);
                        }
                    });
                    //读取文件中的wages信息
                    command.CommandText = null;
                    string wagesReadPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\wages.txt";
                    lines = File.ReadLines(@wagesReadPath);
                    List<string> txt1 = new List<string>();
                    foreach (var line in lines)
                    {
                        txt1.Add(line);
                    }
                    txt1.ForEach(t =>
                    {
                        string[] keyValues = t.Split(',');
                        //一定要注意严格遵守VALUES('','','')的格式不要忘记加单引号''
                        command.CommandText += "INSERT INTO Wage VALUES ('" + keyValues[0] + "','" + keyValues[1] + "') ";
                        try
                        {
                            command.ExecuteNonQuery();
                        }
                        catch (Exception ex)
                        {
                            WriteLog(ex);
                        }
                    });
                    //读取文件中的attendances信息
                    command.CommandText = null;
                    string attendReadPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\attendances.txt";
                    lines = File.ReadLines(@attendReadPath);
                    List<string> txt2 = new List<string>();
                    foreach (var line in lines)
                    {
                        txt2.Add(line);
                    }
                    txt2.ForEach(t =>
                    {
                        string[] keyValues = t.Split(',');
                        //一定要注意严格遵守VALUES('','','')的格式不要忘记加单引号''
                        command.CommandText += "INSERT INTO Attend VALUES ('" + keyValues[0] + "','" + keyValues[1] + "','" + keyValues[2] + "') ";
                        try
                        {
                            command.ExecuteNonQuery();
                        }
                        catch (Exception ex)
                        {
                            WriteLog(ex);
                        }
                    });
                    connection.Close();
                }
            }
            //查询工资金额为指定金额的职工工号和姓名——b
            private void checkWage(string wage)
            {
                string connectionString = @"server=TYLAN_AIO;database=tylanDB;Trusted_Connection=True;";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    SqlCommand command = new SqlCommand();
                    command.Connection = connection;
                    command.CommandText = "select Employee.Num,Employee.Name from Employee left join Attend on(Attend.Num = Employee.Num) left join Wage on(Wage.No = Attend.No) where (Wage.Amount = '" + wage + "')";
                    try
                    {
                        SqlCheck(command);
                    }
                    catch (Exception ex)
                    {
                        WriteLog(ex);
                    }
                    connection.Close();
                }
            }
            //查询出勤率为0的职工姓名和工号——c
            private void checkAttend(int att)
            {
                string connectionString = @"server=TYLAN_AIO;database=tylanDB;Trusted_Connection=True;";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    SqlCommand command = new SqlCommand();
                    command.Connection = connection;
                    command.CommandText = "select Employee.Num,Employee.Name from Employee join Attend on(Attend.Num = Employee.Num) where (Attend.Attendance = '" + att + "')";
                    try
                    {
                        SqlCheck(command);           
                    }
                    catch (Exception ex)
                    {
                        WriteLog(ex);
                    }
                    connection.Close();
                }
            }
            //查询出勤率为10并且工资金额小于2500的职工信息——d
            private void checkAttendAndWage()
            {
                string connectionString = @"server=TYLAN_AIO;database=tylanDB;Trusted_Connection=True;";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    SqlCommand command = new SqlCommand();
                    command.Connection = connection;
                    command.CommandText = "select * from Employee left join Attend on(Attend.Num = Employee.Num) left join Wage on(Wage.No = Attend.No) where (Wage.Amount < 2500 AND Attend.Attendance = 10)";
                    try
                    {
                        SqlCheck(command);
                    }
                    catch (Exception ex)
                    {
                        WriteLog(ex);
                    }
                    connection.Close();
                }
            }
            //数据库查询并返回结果的方法
            private void SqlCheck(SqlCommand command)
            {
                //执行查询并将查询结果填充到数据集
                SqlDataAdapter sqlDA = new SqlDataAdapter();
                sqlDA.SelectCommand = command;
                DataSet ds = new DataSet();
                sqlDA.Fill(ds);
                if (ds.Tables[0].Rows.Count != 0)
                {
                    //遍历并打印数据集
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        foreach (DataColumn dc in ds.Tables[0].Columns)
                        {
                            Console.Write(dc + ":");
                            Console.WriteLine(dr[dc].ToString());
                        }
                    }
                }
                else
                {
                    Console.WriteLine("No suitable result.");
                }
            }
            //初始化数据库方法
            public void InitDB()
            {
                try
                {
                    string connectionString = @"server=TYLAN_AIO;database=tylanDB;Trusted_Connection=True;";
                    SqlConnection connection = new SqlConnection(connectionString);
                    connection.Open();
                    SqlCommand command = new SqlCommand();
                    command.Connection = connection;
                    command.CommandText = "create table Employee(Num int NOT NULL,Name varchar(50),Sex varchar(50),Age int,Department varchar(50)) ";
                    command.CommandText += "create table Wage(No int NOT NULL,Amount money) ";
                    command.CommandText += "create table Attend(Num int NOT NULL,No int,Attendance int) ";
                    //Add primary key.
                    command.CommandText += "alter table Employee add constraint PK_Num primary key(Num) ";
                    command.CommandText += "alter table Wage add constraint PK_No primary key(No) ";
                    command.CommandText += "alter table Attend add constraint PK_NumAttend primary key(Num) ";
                    //Add foreign key.
                    command.CommandText += "alter table Attend add constraint FK_Num foreign key(Num) references Employee(Num) ";
                    command.CommandText += "alter table Attend add constraint FK_No foreign key(No) references Wage(No) ";
                    command.ExecuteNonQuery();
                    connection.Close();
                }
                catch (Exception ex) 
                {
                    WriteLog(ex);
                }
            }
            //异常log打印方法
            public void WriteLog(Exception ex) 
            {
                string logUrl = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\ADOlog.txt";
                if (File.Exists(@logUrl))
                {
                    FileStream fs = new FileStream(logUrl, FileMode.Append);
                    StreamWriter sw = new StreamWriter(fs, Encoding.Default);
                    try
                    {           
                        sw.Write(ex);
                    }
                    catch (Exception ex1)
                    {
                        WriteLog(ex1);
                    }
                    finally
                    {
                        sw.Close();
                        fs.Close();
                    }
                }
                else
                {
                    FileStream fs = new FileStream(logUrl, FileMode.CreateNew);
                    StreamWriter sw = new StreamWriter(fs, Encoding.Default);
                    try
                    {
                        sw.Write(ex);
                    }
                    catch (Exception ex1)
                    {
                        WriteLog(ex1);
                    }
                    finally
                    {
                        sw.Close();
                        fs.Close();
                    }
                }
            }
        }
    }

    运行如下:

    输入a会将桌面上三个文件employees.txt,attendances.txt和wages.txt中的数据添加到相应的数据库表中。

    文件格式如下:

    初始化以及插入数据后的数据库表像下面这样:

    本次主要练习了ADO.NET关于在数据库SQL Server中进行增删改查的一些操作,也用到了文件流,泛型和lambda,异常处理以及生命周期的一些简单应用。

    希望大家能多提改进方面的意见并给出相应代码:)

  • 相关阅读:
    JS&和&&-T
    PHP Xdebug
    PHP非对称加密
    JavaScript:弹框输出
    JavaScript:函数闭包
    JavaScript:函数
    JavaScript:正则表达式 & 日期对象
    JavaScript: Math数学对象 & Number对象
    JavaScript: 数组
    JavaScript: 常用字符串API
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/4571056.html
Copyright © 2020-2023  润新知