c#通讯录管理系统(女朋友版本)

本文为博主原创文章,未经博主同意不得转载
本文链接:https://blog.csdn.net/qq_38215042/article/details/110848032

这个是大学程序期末设计

1:功能介绍

  1. 创建通讯录
  2. 新建联系人
  3. 查找联系人(1.按学号" ; “2.按姓名” ; “3.按电话号码” ; "4.按序号;)
  4. 删除联系人(1.按学号" ; “2.按姓名” ; “3.按电话号码” ; "4.按序号;)
  5. 显示通讯录信息(序号" + “学号” + “姓名” + "电话号码)
  6. 退出

程序流程图:

在这里插入图片描述

2:功能实现

这里分为主程序,实体类

  1. 主程序
using System;
using System.Collections;
using System.Collections.Generic;
using ConsoleApp1;//引入:这个类里面是定义的实体类(就是一个仓库)
namespace MyClass
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("");
                //这里定义i的原因是:第一次循环把所需信息都输出,后面i不等于1之后就只输出:"选择功能:"
                int i = 1;
                while (true)//while循环,这里是一个死循环,参数是true或者false,如果等于true则无限循环,等于false终止
                {
                    if (i == 1)
                    {
                        Console.WriteLine("\t\t\t******************~@~欢迎使用通讯录系统******************");
                        Console.WriteLine("\t\t\t*\t\t\t1.通讯录的建立\t\t\t*");
                        Console.WriteLine("\t\t\t*\t\t\t2.新建联系人\t\t\t*");
                        Console.WriteLine("\t\t\t*\t\t\t3.查找联系人\t\t\t*");
                        Console.WriteLine("\t\t\t*\t\t\t4.删除联系人\t\t\t*");
                        Console.WriteLine("\t\t\t*\t\t\t5.显示通讯录信息\t\t*");
                        Console.WriteLine("\t\t\t*\t\t\t0.退出\t\t\t\t*");
                        Console.WriteLine("\t\t\t******************~@~欢迎使用通讯录系统******************");
                        Console.WriteLine();
                        Console.Write("请选择0-5:");//Console.Write():输出语句,在括号书写需要输出到控制台的数据,数据随意书写,一般是说明行文字,数据写在双引号内
                    }
                    else
                    {
                        Console.Write("选择功能:");
                    }
                    i++;//i++:每循环一次i的值加一
                    string choose = Console.ReadLine().Trim();//Console.ReadLine().Trim():获取隔行控制台输入的数据
                    switch (choose)//switch...case判断语句,根据choose的值执行相应的语句。break:终止继续向下判断(如果choose等于1,则只会执行Create()方法,不会继续执行)。default:默认,就是所有条件都符合就执行这个语句块的方法
                    {
                        case "1":
                            Create();
                            break;
                        case "2":
                            AddItem();
                            break;
                        case "3":
                            SearchItem();
                            break;
                        case "4":
                            RemoveItem();
                            break;
                        case "5":
                            Show();
                            break;
                        case "0":
                            return;
                        default:
                            Console.WriteLine("选择错误!");
                            break;
                    }

                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        private static List<Student> student = new List<Student>();//定义List对象,用户存放数据。
        //本对象Student有三个参数,学号(setno)、姓名(name)、手机号(phone)。你可以理解把Student理解成一个仓库,一个仓库可以存储,学号(setno)、姓名(name)、手机号(phone)各一个。
        //前面加上List则变成了集合,一个集合["1","2","3"...."n"]则可以存储n各对象。


        //通讯录的建立方法
        public static void Create()
        {
            
            try
            {
                for (; ; )//因为建立通讯录可能是多个,所以用了for循环,这种写法则是无限发循环
                {
                    Student add = new Student();
                    Console.Write("学号:");
                    //赋值姓名
                    add.SetNo = Console.ReadLine().Trim();// The set accessor is invoked here
                    Console.Write("姓名:");
                    //赋值姓名
                    add.Name = Console.ReadLine().Trim();
                    Console.Write("电话号码:");
                    //赋值电话号码
                    add.Phone = Console.ReadLine().Trim();
                    
                    if (add.SetNo == "-1" && add.Name == "-1" && add.Phone == "-1")//判断输入的学生信息是否都为-1
                    {
                        Console.WriteLine("建立通讯录:");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        for (int i = 0; i < student.Count; i++)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
                        {
                           Console.WriteLine((i + 1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
                        }
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        break;//如果输入的学生信息都是-1则跳出for循环。
                    }
                    else
                    {
                        student.Add(add);
                    }
                }
              

            }
            catch (Exception e)
            {
                throw e;
            }
        }
        //新建联系人方法
        public static void AddItem()
        {
            try
            {
                Student add = new Student();//定义一个通讯录对象
                Console.Write("学号:");
                //赋值姓名
                add.SetNo = Console.ReadLine().Trim();// 给对象属性赋值,这个赋值的是学号----------------------------The set accessor is invoked here(set():方法给属性赋值)
                Console.Write("姓名:");
                //赋值姓名
                add.Name = Console.ReadLine().Trim();// 给对象属性赋值,这个赋值的是姓名----------------------------The set accessor is invoked here(set():方法给属性赋值)
                Console.Write("电话号码:");
                //赋值电话号码
                add.Phone = Console.ReadLine().Trim();// 给对象属性赋值,这个赋值的是电话号码----------------------------The set accessor is invoked here(set():方法给属性赋值)
                student.Add(add);
                //循环得到添加后的所有数据
                Console.WriteLine("插入后:");
                Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
                Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                for (int i = 0;i<student.Count;i++ )//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
                {
                    Console.WriteLine((i + 1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
                }
                Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        //查找联系人方法
        public static void SearchItem()//这里就是定义一个方法,public:公共的;static:静态:void:没有返回值;SearchItem:方法名字;():里面可以放参数;这个方法上面有调用的。
        {
            try
            {
                Console.WriteLine("选择查找方式:");
                Console.WriteLine("\t\t\t\t" + "1.按学号" + "\t\t" + "2.按姓名" + "\t\t" + "3.按电话号码" + "\t\t" + "4.按序号" + "\t\t");
                string choose = Console.ReadLine().Trim();
                switch (choose)
                {
                    case "1":
                        Console.WriteLine("请输入学号:");
                        string setNo = Console.ReadLine().Trim();
                        for(int i = 0; i < student.Count; i++)//for循环:定义一个变量:i等于0:因为List集合的数据是从零开始计数的;student.Count:获取student List集合的数量,保证循环得次数。如果student.Count等于1则只for循环只会循环一次;i++:每循环一次i的值加1
                        {
                            if (setNo == student[i].SetNo)//student[i].SetNo。student[i]:获取第i个对象(仓库);.SetNo:取值(这里取得是学号(setNo))。学号相同,则输出这个同学的信息
                            {
                                //这里书写i+1是应为List集合是从0开始的!!!
                                Console.WriteLine("要查找的是第"+(i + 1)+"位通讯者");
                                Console.WriteLine("\t\t\t\t" + "学号:" +student[i].SetNo + "\t\t" + "姓名:" + student[i].Name + "\t\t" + "电话号码:" + student[i].Phone);
                            }
                        }
                        break;
                    case "2":
                        Console.WriteLine("请输入姓名:");
                        string name = Console.ReadLine().Trim();
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (name == student[i].Name)
                            {
                                Console.WriteLine("要查找的是第" + (i + 1) + "位通讯者");
                                Console.WriteLine("\t\t\t\t" + "学号:" + student[i].SetNo + "\t\t" + "姓名:" + student[i].Name + "\t\t" + "电话号码:" + student[i].Phone);
                            }
                        }
                        break;
                    case "3":
                        Console.WriteLine("请输入电话号码:");
                        string phone = Console.ReadLine().Trim();
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (phone == student[i].Phone)
                            {
                                Console.WriteLine("要查找的是第" + (i + 1) + "位通讯者");
                                Console.WriteLine("\t\t\t\t" + "学号:" + student[i].SetNo + "\t\t" + "姓名:" + student[i].Name + "\t\t" + "电话号码:" + student[i].Phone);
                            }
                        }
                        break;
                    case "4":
                        Console.WriteLine("请输入序号:");
                        int orderNumber = Convert.ToInt32(Console.ReadLine().Trim());
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (orderNumber -1 == i)
                            {
                                Console.WriteLine("要查找的是第" + (i + 1) + "位通讯者");
                                Console.WriteLine("\t\t\t\t" + "学号:" + student[i].SetNo + "\t\t" + "姓名:" + student[i].Name + "\t\t" + "电话号码:" + student[i].Phone);
                            }
                        }
                        break;
                    default:
                        Console.WriteLine("选择错误!");
                        break;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        //删除联系人方法
        public static void RemoveItem()
        {
            try
            {
                Console.WriteLine("选择删除方式:");
                Console.WriteLine("\t\t\t\t" + "1.按学号" + "\t\t" + "2.按姓名" + "\t\t" + "3.按电话号码" + "\t\t" + "4.按序号" + "\t\t");
                string choose = Console.ReadLine().Trim();
                switch (choose)
                {
                    case "1":
                        Console.WriteLine("请输入学号:");
                        string setNo = Console.ReadLine().Trim();// The get accessor is invoked here
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (setNo == student[i].SetNo)
                            {
                                student.Remove(student[i]);//这里删除输入学号和已存学号相等的这条通讯录信息
                                break;
                            }
                        }
                        Console.WriteLine("删除后:");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        for (int i = 0; i < student.Count; i++)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
                        {
                            Console.WriteLine((i + 1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
                        }
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        break;
                    case "2":
                        Console.WriteLine("请输入姓名:");
                        string name = Console.ReadLine().Trim();
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (name == student[i].Name)
                            {
                                student.Remove(student[i]);
                                break;
                            }
                        }
                        Console.WriteLine("删除后:");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        for (int i = 0; i < student.Count; i++)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
                        {
                            Console.WriteLine((i + 1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
                           
                        }
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        break;
                    case "3":
                        Console.WriteLine("请输入电话号码:");
                        string phone = Console.ReadLine().Trim();
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (phone == student[i].Phone)
                            {
                                student.Remove(student[i]);
                                break;
                            }
                        }
                        Console.WriteLine("删除后:");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        for (int i = 0; i < student.Count; i++)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
                        {
                            Console.WriteLine((i + 1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
                        }
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        break;
                    case "4":
                        Console.WriteLine("请输入序号:");
                        int orderNumber = Convert.ToInt32(Console.ReadLine().Trim());
                        for (int i = 0; i < student.Count; i++)
                        {
                            if (orderNumber - 1 == i)
                            {
                                student.Remove(student[i]);
                                break;
                            }
                        }
                        Console.WriteLine("删除后:");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        for (int i = 0; i < student.Count; i++)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
                        {
                            Console.WriteLine((i+1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
                        }
                        Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
                        break;
                    default:
                        Console.WriteLine("选择错误!");
                        break;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        //显示通讯录信息
        public static void Show()
        {
            Console.WriteLine("当前通讯录内容如下:");
            Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
            Console.WriteLine("\t\t\t\t" + "\t\t" + "序号" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
            Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
            for (int i = 0; i < student.Count; i++)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
            {
                Console.WriteLine((i + 1) + "\t\t" + student[i].SetNo + "\t\t" + student[i].Name + "\t\t" + student[i].Phone);// The get accessor is invoked here(get():方法取值。)每个仓库有对应的三个值(因为我们就给仓库定义了三个,其实可以有n个的)通过.参数拿值
            }
            Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
        }
    }
}


  1. 实体类
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1
{
    class Student
    {
        private string _setNo; //学号
        private string _name; //姓名
        private string _phone; //手机号
                            //创建Person对象
       
        public Student(string SetNo, string Name, string Phone)
        {
            this._setNo = SetNo;
            this._name = Name;
            this._phone = Phone;
        }
        //学号
        public string SetNo
        {
            get { return _setNo; }
            set { _setNo = value; }
        }
        //姓名
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        //手机号
        public string Phone
        {
            get { return _phone; }
            set { _phone = value; }
        }
         public Student()
        {
            
        }
    }
}

3:项目需求:

需求文档

C#程序设计期末作业

  1. 题目
    学生通讯录管理系统

  2. 功能介绍
    请重点关注下面的加粗内容,不按要求的一律按不及格处理!
    概述:使用C#开发一个学生通讯录管理系统,该程序可以实现创建一个学生通讯录,并实现一些相关操作,具体功能如图1所示。该系统基于控制台应用程序,共包含6个功能,通过输入数字选择相应的功能。
    在这里插入图片描述
    图1 功能图

  3. 通讯录的建立:输入1,进入该功能,需要用户输入若干学生信息,若学生信息输入为-1,表示输入结束。输入结束后,把所有学生信息显示出来,然后可以继续选择其他功能进行操作。如图2所示。
    在这里插入图片描述
    图2 通讯录建立功能

  4. 插入通讯录记录:输入2,进入该功能,可再次输入一个学生添加到通讯录中,输入完成后把所示学生信息显示出来,如图3所示。
    在这里插入图片描述
    图3 插入通讯录记录功能

  5. 查询通讯记录:输入3,进入该功能,可以选择查找方式,按学号查找或者按姓名查找,根据输入的信息,把相应的学生信息显示出来,如图4所示。
    在这里插入图片描述

图4 查询通讯记录功能
6. 删除通讯录记录:输入4,进入该功能,可以选择删除方式,按序号,按学号,按姓名,输入完成后删除相应的学生,然后把所有学生信息显示出来。如图5所示。
在这里插入图片描述

图5 删除通讯录记录功能
7. 显示通讯录信息:输入5,进入该功能,把所有学生信息显示出来。如图6所示。
8. 退出管理系统:输入0,退出该程序。

在这里插入图片描述

图6 显示通讯录信息功能

要求如下:

  1. 该程序要基于控制台开发,不是windows窗体应用程序。
  2. 需要使用面向对象的思想编写此程序,比如需要用到类的概念,至少包含一个学生类
  3. 程序的界面可以和上述截图有所不同,但功能不能改变。
  4. 开发完成后,写出相关文档,描述整个开发过程,该文档主要考察对所开发程序的理解程度,同时,此文档会作为成绩的重要依据。文档中只需要写出开发设计过程,相当于讲一下这个程序每个功能是如何实现的不要列举相关的概念及名词解释、心得体会等与本程序无关的内容,文档字数不少于700字(以Word中统计字数为准),文档中不得粘贴代码,也不能插入代码截图,可以用语言描述出代码的含义,文档中可以插入程序运行图,或者自己画的流程图之类的图表
  5. 若发现文档和其他同学有较多雷同的地方,按作弊处理
  6. 文档格式要求:正文部分:宋体,小四号,行距1.5倍,首行缩进2字符;标题:黑体,小三号,行距1.5倍。页眉设置为学号姓名。文档中不要出现大量的空行。
  7. 提交时,把文档放到程序文件夹中,然后进行压缩,最后把压缩包命名为学号姓名,如201901024101张三

4:项目git地址

5:验证文件

6:功能流程讲解

6.1:准本工作

  1. 环境参数:配置好c#所需环境
  2. 安装ide:Visual Studio 2019
  3. 准备一个实体类:Student
  4. 定义一个List对象用于存储通讯录信息

6.2:设计一个死循环

设计一个死循环

  1. 实现方式:书写一个while循环,参数给true实现目标效果
  2. 书写目的:使程序持续循环执行,以达到可以持续工作的目标

6.3:使用 switch…case 语句

使用 switch…case 语句

  1. 实现方式:按照需求书写正确的swich….case语句
  2. 书写目的:通过参数判断执行不同的方法用以实现不同的功能

6.4:书写Create()方法

书写Create()方法

  1. 实现目标:用于通讯录的建立
  2. 功能实现讲解:通过for(;;)循环语句,实现逻辑上可以无限添加通讯信息的功能,因为输入“-1”可以结束此次功能,所以增加一个判断跳出循环功能。最后按照要求写一个for循环把存储的通讯录信息全部打印到控制台一份
  3. 程序运行截图:省略

6.5:书写AddItem()方法

书写AddItem()方法

  1. 实现目标:新建联系人方法
  2. 功能实现讲解:因为需求只要输入一个同学的信息,所以简化Create()方法就可以实现此功能,在此不做详细讲解
  3. 程序运行截图:省略

6.6:书写SearchItem()方法

书写SearchItem()方法

  1. 实现目标:查找联系人方法
  2. 功能实现讲解:因为需要选择方式,按学号、按姓名、按手机号,所以这里使用switch…case语句实现选择的功能。根据不同的选择,书写判断语句,获取相对应的数据。最后根据要求把查询出来的对应数据输出到控制台展示出来
  3. 程序运行截图:省略

6.7:书写RemoveItem()方法

书写RemoveItem()方法

  1. 实现目标:删除联系人方法
  2. 功能实现讲解:因为这里依然需要选择方式,按学号、按姓名、按手机号,所以这里依然使用switch…case语句的方式实现选择的功能。选择好特定的方式之后,根据输入的值删除特定的用户数据。最后把未删除的所有学生信息输出到控制台展示出来。
  3. 程序运行截图:省略

6.8:书写Show()方法

书写Show()方法

  1. 实现目标:显示通讯录信息
  2. 功能实现讲解:此功能就是通过一个简单的foreach()循环,把存储在 List集合里面的数据输出到控制台展示出来
  3. 程序运行截图:省略

版权声明:本文为qq_38215042原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。