C#期末作业——学生成绩管理

作业要求

学生成绩管理
(1)class Student { int id; string name; int score; Student next; }
(2)用链表或系统List类实现。用数组实现也可(上限100条记录)?
(3)增:检查学号无重复
(4)删:若输入整数则按学号定位要删除的记录;
         若输入字符串则按姓名(可缩写)定位要删除的记录
技巧:先按字符串读入到临时变量,检查其是否含有数字,便知是学号还是姓名。
(5)改:若输入整数则按学号定位要修改的记录;
         若输入字符串则按姓名(可缩写)定位要修改的记录
    (4)、(5)若因为姓名缩写导致多于一条记录,拒执行并报错。
     修改时,逐一字段进行下列操作:
     (a) 显示字段名和当前值
     (b) 输入该字段的新值。如果只敲回车不输入新值,则该字段不修改,保持当前值不变。
技巧:先按字符串读入到临时变量,检查其长度是否为0,便知需不需要覆盖原值。
(6)查:输入格式为:字段名 关系运算符 查询值
     例如,score > 80,查询成绩大于80分者。相当于一条SQL查询操作:
     select * from Student where score > 80
     如果按字符串类型字段(name)查询,查询值可以缩写。 
(7)存:存盘
(8)取:还原

主类Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace classManager
{
    class Program
    {
        static void Main(string[] args)
        {
            ClassList a = new ClassList();
            String i = "";
            Boolean t = true;
            Console.WriteLine("-----------------------欢迎使用学生成绩管理系统1.0.0版-------------------->");
            Console.WriteLine();
            Console.WriteLine("    ||      ||   ||||||||||    ||             ||               || ||");
            Console.WriteLine("    ||      ||   ||            ||             ||             ||     ||");
            Console.WriteLine("    ||||||||||   |||||||||     ||             ||            ||       ||");
            Console.WriteLine("    ||      ||   ||            ||             ||             ||     ||");
            Console.WriteLine("    ||      ||   ||||||||||    |||||||||||    |||||||||||      || ||");
            Console.WriteLine();
            Console.WriteLine("-------------------------------------------------------------------------->");
            Console.WriteLine();
            while (t)
            {
                Console.WriteLine("----------操作台----------->");
                Console.WriteLine("\t1-------->添加学生");
                Console.WriteLine("\t2-------->删除学生");
                Console.WriteLine("\t3-------->编辑学生信息");
                Console.WriteLine("\t4-------->查询学生信息");
                Console.WriteLine("\t5-------->打印学生信息");
                Console.WriteLine("\t6-------->存盘");
                Console.WriteLine("\t7-------->打开");
                Console.WriteLine("\t8-------->退出");
                Console.WriteLine("--------------------------->");
                i = Console.ReadLine();
                while (!isNumber(i)){
                    Console.WriteLine("请输入正确的命令!");
                    i =Console.ReadLine();
                }
                switch (int.Parse(i))
                {
                    case 1:
                        a.add();
                        break;
                    case 2:
                        a.delete();
                        break;
                    case 3:
                        a.edit();
                        break;
                    case 4:
                        a.find();
                        break;
                    case 5:
                        a.print();
                        break;
                    case 6:
                        a.Write();
                        break;
                    case 7:
                        a.Read();
                        break;
                    case 8:
                        t = false;
                        break;
                }
            }
        }
        protected static bool isNumber(string message)
        {/*
          * 判断传入的字符串是否是数字
          * 如果是返回true  否则返回false
          */
            try
            {
                int.Parse(message);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

学生类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace classManager
{
    class Student
    { /**
         *
         * 学生类
         *      学号 id
         *      姓名 name
         *      成绩  score 
         */
        private int id;
        private String name;
        int score;
        //Student next;

        public Student (){
        }

        public Student(int i,String n,int s)
        {
            id = i;
            name = n;
            score = s;
        }

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public String Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Score
        {
            get { return score; }
            set { score = value; }
        }

        //internal student next
        //{
        //    get { return next; }
        //    set { next = value; }
        //}

        public override string ToString()
        {/*
          * 重写ToString
          * 
          */
            return "ID: " + id + "   姓名: " + name+"   成绩"+score;
        }
    }
}

链表操作

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Text.RegularExpressions;
    using System.IO;
    
    namespace classManager
    {
        class ClassList
        {/*
          * 链表操作类
          * 
          */
           
            List<Student> s = new List<Student>();
            int count = 0;
    
            public ClassList()
            {
               
                //s.Add(new Student(201502, "obama", 80));
                //s.Add(new Student(201503, "bush", 90));
            }
    
            public void add()
            {/*
              *     添加学生
              *         检查学号是否冲突
              */
                String i = "";
                String n = "";
                String c = "";
                Console.WriteLine("请输入学号:");
                i = Console.ReadLine();
                while (!isNumberic(i))
                {
                    Console.WriteLine("请输入正确的学号(纯数字):");
                    i = Console.ReadLine();
                } 
                Console.WriteLine("请输入姓名:");
                n = Console.ReadLine();
                while (n == "")
                {
                    Console.WriteLine("请输入正确的姓名:");
                    n = Console.ReadLine();
                }
                Console.WriteLine("请输入成绩:");
                c = Console.ReadLine();
                while (!isNumberic(c))
                {
                    Console.WriteLine("请输入正确的成绩(纯数字):");
                    c = Console.ReadLine();
                } 
                while (true)
                {
                    if (count == 0)     //检查
                    {
                        s.Add(new Student(int.Parse(i), n, int.Parse(c)));
                        count++;
                        Console.WriteLine("------添加成功!");
                        break;
                    }
                    else if (tooId(int.Parse(i)) == -1)     //检查id有没有重复和是不是最后一个学生信息
                    {
                        Console.WriteLine("------学号重复!请重新输入学号:");
                        i = Console.ReadLine();
                    }
                    else
                    {
                        s.Add(new Student(int.Parse(i), n, int.Parse(c)));
                        count++;
                        Console.WriteLine("------添加成功!");
                        break;
                    }
                }
            }
    
            public void delete()
            {/*
              * 删除学生类
              * 检查stu     若stu内含有数字则是按学号删除   否则按姓名删除
              */
                int index = 0;
                String stu = "";
                Console.WriteLine("请输入要删除的学生信息");
                stu = Console.ReadLine();
    
                if (isNumberic(stu))
                {/*
                  * 判断stu如果是数字则按学号定位
                  * 首先判断学号是否存在
                  */
                    index = fID(stu);
                    if (index == -1)
                    {
                        Console.WriteLine("错误:学号未找到");
                    }
                    else                
                    {
                            Console.WriteLine(s[index].ToString());
                            s.Remove(s[index]);
                            count--;
                            Console.WriteLine("删除成功");
                    }
                }
                else
                {
                    index = fName(stu);
                    if (index == -1)
                    {
                        Console.WriteLine("错误:名字未找到");
                    }else if(index == -2)
                    {
                        Console.WriteLine("错误:匹配到多条记录!");
                    }
                    else 
                    {
                            Console.WriteLine(s[index].ToString());
                            s.Remove(s[index]);
                            count--;
                            Console.WriteLine("删除成功");
                    }
                }
            }
    
            public void edit()
            {/*
              * 修改学生数据
              * 若输入整数则按学号定位要修改的记录;
              * 若输入字符串则按姓名(可缩写)定位要修改的记录
              */
                String stu = "";
                int index = 0;
                Console.WriteLine("请输入要修改的学生信息");
                stu = Console.ReadLine();
                String id = "0";
                String name = "0";
                String score = "0";
                if (isNumberic(stu))
                {
                    index = fID(stu);
                    if (index == -1)
                    {
                        Console.WriteLine("错误:学号未找到");
                    }
                    else  
                    {
                            Console.WriteLine("您要修改的数据" + s[index].ToString());
                            Console.WriteLine("请输入学号:");
                            id = Console.ReadLine();
                            if (id == "")
                                id = Convert.ToString(s[index].Id);
                            Console.WriteLine("请输入姓名:");
                            name = Console.ReadLine();
                            if (name == "")
                                name = s[index].Name;
                            Console.WriteLine("请输入成绩:");
                            score = Console.ReadLine();
                            if (score == "")
                                score = Convert.ToString(s[index].Score);
                            //Console.WriteLine(id+"    "+name+"    "+score);
                            while (true)
                            {
                                if (tooId(int.Parse(id)) == -1 && id != Convert.ToString(s[index].Id))
                                {
                                    Console.WriteLine("学号重复,请重新输入学号:");
                                    id = Console.ReadLine();
                                    if (id == "")
                                        id = Convert.ToString(s[index].Id);
                                }
                                else
                                {
                                    s[index].Id = int.Parse(id);
                                    s[index].Name = name;
                                    s[index].Score = int.Parse(score);
                                    Console.WriteLine("修改成功");
                                    break;
                                }
                            }
                        }
                }
                else
                {
    
                    index = fName(stu);
                    if (index == -1)
                    {
                        Console.WriteLine("错误:名字未找到");
                    }
                    else if (index == -2)
                    {
                        Console.WriteLine("错误:匹配到多条记录!");
                    }
                    else
                    {
                            Console.WriteLine("您要修改的数据" + s[index].ToString());
                            Console.WriteLine("请输入学号:");
                            id = Console.ReadLine();
                            if (id == "")
                                id = Convert.ToString(s[index].Id);
                            Console.WriteLine("请输入姓名:");
                            name = Console.ReadLine();
                            if (name == "")
                                name = s[index].Name;
                            Console.WriteLine("请输入成绩:");
                            score = Console.ReadLine();
                            if (score == "")
                                score = Convert.ToString(s[index].Score);
                            while (true)
                            {
                                if (tooId(int.Parse(id)) == -1 && id != Convert.ToString(s[index].Id))
                                {
                                    Console.WriteLine("学号重复,请重新输入学号:");
                                    id = Console.ReadLine();
                                    if (id == "")
                                        id = Convert.ToString(s[index].Id);
                                }
                                else
                                {
                                    s[index].Id = int.Parse(id);
                                    s[index].Name = name;
                                    s[index].Score = int.Parse(score);
                                    Console.WriteLine("修改成功");
                                    break;
                                }
                            }
                    }
                }
            }
    
            public void find()
            {/*
              * 查询类
              * 查:输入格式为:字段名 关系运算符 查询值
              * 例如,score > 80,查询成绩大于80分者。相当于一条SQL查询操作:select * from Student where score > 80
              * 如果按字符串类型字段(name)查询,查询值可以缩写。
              */
                String sql = "";
                Console.WriteLine("请输查询语句---->例如score > 80,查询成绩大于80分者");
                sql = Console.ReadLine();
                if (sql == "")
                {
                    sql = " 1 ";
                }
                String where = getWhereSql(sql);
                String ro = getROSql(sql);
                String value = getValueSql(sql);
                
                switch (ro){
                    case ">":
                        sqla(where,value);
                        break;
                    case "<":
                        sqlb(where, value);
                        break;
                    case"=":
                        sqlc(where, value);
                        break;
                    case">=":
                        sqle(where, value);
                        break;
                    case"<=":
                        sqld(where, value);
                        break;
                    default:
                        Console.WriteLine("查询语句不正确!例如,score > 80,查询成绩大于80分者");
                        break;
                }
            }
    
            public void print()
           {/*
             * 打印所有的学生
             */
               if (count == 0)
                   Console.WriteLine("没有数据!");
               else
               for (int i = 0; i < count;i++ )
                   Console.WriteLine(s[i].ToString());
           }
            public void print(int i)
            {/*
              *打印第i个学生信息 
              */
                if (i<count)
                Console.WriteLine(s[i-1].ToString());
                else
                    Console.WriteLine("没有数据!");
            }
    
            protected bool isNumberic(string message)
            {/*
              * 判断传入的字符串是否是数字
              * 如果是返回true  否则返回false
              */
                try
                {
                    int.Parse(message);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            public int tooId(int id)
            {/*
              * 检查学号是否重复
              * 
              */
                for (int i = 0; i <count; i++)
                {
                    if (s[i].Id == id)
                        return -1;
                }
                return id;
            }
    
            public int fID(String id)
            {/*
              * 检查学号是否存在
              * 
              */
                int rid = -1;
                Boolean a = false;
                for (int i = 0; i < count; i++)
                {
                    if (Convert.ToString(s[i].Id) == id)
                    { 
                        a = true;
                        rid = i;
                    }
                       
                }
                if (a)
                    return rid;
                else
                    return -1;
            }
    
            public int fName(String name)
            {/*
              * 姓名缩写匹配
              */
                int number = 0;
                int rindex = -1;
                for (int j = 0;j<count;j++)
                {
                    for (int m=0,n=0; m < s[j].Name.Length; m++)
                    {
                        if (s[j].Name[m] == name[n])
                            n++;
                        if (n == name.Length)
                        {
                            rindex = j;
                            number++;
                            break;
                        }
                    }
                }
                if (number == 1)
                    return rindex;
                else if (number > 1)
                    return -2;
                else
                    return -1;
            }
    
            public String getWhereSql(String sql)
            {/*
              * 返回sql中的条件
              */
                String[] rsql = sql.Split(' '); ;
                return rsql[0];
    
            }
            public String getROSql(String sql)
            {/*
              * 返回sql中的关系运算符
              */
                String[] rsql = sql.Split(' '); ;
                return rsql[1];
            }
            public string getValueSql(string sql)
            {/*
              * 返回sql中的查询值
              */
                String[] rsql = sql.Split(' '); ;
                return rsql[2];
            }
    
            /*
             * 
             * 查询方法
             * 
             */
            public void sqla(String In,String value)
            {/*
              * >
              */
                switch(In){
                    case "id":
                        Console.WriteLine("错误:id请用等于符号(=)");
                        break;
                    case "name":
                        Console.WriteLine("错误:名字请用等于符号(=)");
                        break;
                    case "score":
                         Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Score > int.Parse(value))
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    default:
                        Console.WriteLine("查询语句不正确!例如,score > 80,查询成绩大于80分者");
                        break;
            }
            }
            public void sqlb(String In, String value)
            {/*
              * <
              */
                switch (In)
                {
                    case "id":
                        Console.WriteLine("错误:id请用等于符号(=)");
                        break;
                    case "name":
                        Console.WriteLine("错误:名字请用等于符号(=)");
                        break;
                    case "score":
                        Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Score < int.Parse(value))
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    default:
                        Console.WriteLine("查询语句不正确!例如,score > 80,查询成绩大于80分者");
                        break;
                }
            }
            public void sqlc(String In, String value)
            {/*
              * =
              */
                switch (In)
                {
                    case "id":
                        Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Id == int.Parse(value))
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    case "name":
                        Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Name == value)
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    case "score":
                        Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Score == int.Parse(value))
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    default:
                        Console.WriteLine("查询语句不正确!例如,score > 80,查询成绩大于80分者");
                        break;
                }
                
            }
            public void sqld(String In, String value)
            {/*
              * <=
              */
                switch (In)
                {
                    case "id":
                        Console.WriteLine("错误:id请用等于符号(=)");
                        break;
                    case "name":
                        Console.WriteLine("错误:名字请用等于符号(=)");
                        break;
                    case "score":
                        Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Score <= int.Parse(value))
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    default:
                        Console.WriteLine("查询语句不正确!例如,score > 80,查询成绩大于80分者");
                        break;
                }
            }
            public void sqle(String In, String value)
            {/*
              * <=
              */
                switch (In)
                {
                    case "id":
                        Console.WriteLine("错误:id请用等于符号(=)");
                        break;
                    case "name":
                        Console.WriteLine("错误:名字请用等于符号(=)");
                        break;
                    case "score":
                        Console.WriteLine("查询结果-->");
                        for (int i = 0; i < count; i++)
                        {
                            if (s[i].Score >= int.Parse(value))
                                Console.WriteLine(s[i].ToString());
                        }
                        break;
                    default:
                        Console.WriteLine("查询语句不正确!例如,score > 80,查询成绩大于80分者");
                        break;
                }
            }
            /*
             * 
             * 查询方法
             * 
             */
    
            public void Write()
            {/*
              * 文件存盘
              * 
              */
                Console.WriteLine("请输入文件存储路径-->");
                Console.WriteLine(@"例如:默认路径D:\\classScore.txt");
                string fPath = "";
                string output = "";
                FileStream file = null;
                StreamWriter sw = null;
                fPath = Console.ReadLine();
                if (fPath == "")
                {
                    fPath = "D:\\classScore.txt";
                }
                file = new FileStream(fPath, FileMode.Create);
                sw = new StreamWriter(file);
                for (int i = 0; i < count; i++)
                {
                    output =  s[i].Id +" "+s[i].Name +" "+s[i].Score + "\r\n";
                    sw.Write(output);
                    sw.Flush();
                }
                Console.WriteLine("保存完成!  共" + s.Count + "条信息");
                sw.Close();
                file.Close();
            }
            public void Read()
            {/*
              * 文件读取
              * 
              */
                Console.WriteLine("请输入文件读取路径-->");
                Console.WriteLine(@"例如:默认路径D:\\classScore.txt");
                string fPath = "";
                string input = null;
                StreamReader sr = null;
                fPath = Console.ReadLine();
                if (fPath == "")
                {
                    fPath = "D:\\classScore.txt";
                }
                sr = new StreamReader(fPath, Encoding.UTF8);
                while ((input = sr.ReadLine()) != null)
                {
                    string[] arr = input.Split(' ');//字符串分离
                    s.Add(new Student(Int32.Parse(arr[0]), arr[1], Int32.Parse(arr[2])));
                    count++;
                }
                Console.WriteLine("读取完成!  共" + s.Count + "条信息");
                sr.Close();
            }
        }
    }
    原文作者:SQL
    原文地址: https://segmentfault.com/a/1190000009763018
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞