这个是大学程序期末设计
1:功能介绍
- 创建通讯录
- 新建联系人
- 查找联系人
- 删除联系人
- 显示通讯录信息
- 退出
2:功能实现
这里分为主程序,实体类
- 主程序
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
{
foreach (var stu in student)
{
Console.WriteLine("建立通讯录:");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t" );
Console.WriteLine("\t\t\t\t" + "学号"+"\t\t"+ "姓名"+"\t\t"+ "电话号码" + "\t\t");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine(stu.SetNo + "\t\t"+ stu.Name+"\t\t"+stu.Phone);
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);
//循环得到添加后的所有数据
foreach (var stu in student)//for循环的另外一种形式,student是上面定义的list集合,stu:就和上面的add对象一样,这里就是每次从list集合拿出来一个仓库
{
Console.WriteLine("插入后:");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine("\t\t\t\t" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine(stu.SetNo + "\t\t" + stu.Name + "\t\t" + stu.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");
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;
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");
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("删除后:");
foreach (var stu in student)
{
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine("\t\t\t\t" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine(stu.SetNo + "\t\t" + stu.Name + "\t\t" + stu.Phone);
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("删除后:");
foreach (var stu in student)
{
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine("\t\t\t\t" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine(stu.SetNo + "\t\t" + stu.Name + "\t\t" + stu.Phone);
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("删除后:");
foreach (var stu in student)
{
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine("\t\t\t\t" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine(stu.SetNo + "\t\t" + stu.Name + "\t\t" + stu.Phone);
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
}
break;
default:
Console.WriteLine("选择错误!");
break;
}
}
catch (Exception e)
{
throw e;
}
}
//显示通讯录信息
public static void Show()
{
Console.WriteLine("当前通讯录内容如下:");
foreach (var stu in student)
{
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine("\t\t\t\t" + "学号" + "\t\t" + "姓名" + "\t\t" + "电话号码" + "\t\t");
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
Console.WriteLine(stu.SetNo + "\t\t" + stu.Name + "\t\t" + stu.Phone);
Console.WriteLine("\t\t\t" + "-----------------------------------" + "\t\t\t");
}
}
}
}
- 实体类
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 功能图
通讯录的建立:输入1,进入该功能,需要用户输入若干学生信息,若学生信息输入为-1,表示输入结束。输入结束后,把所有学生信息显示出来,然后可以继续选择其他功能进行操作。如图2所示。
图2 通讯录建立功能
插入通讯录记录:输入2,进入该功能,可再次输入一个学生添加到通讯录中,输入完成后把所示学生信息显示出来,如图3所示。
图3 插入通讯录记录功能
查询通讯记录:输入3,进入该功能,可以选择查找方式,按学号查找或者按姓名查找,根据输入的信息,把相应的学生信息显示出来,如图4所示。
图4 查询通讯记录功能
删除通讯录记录:输入4,进入该功能,可以选择删除方式,按序号,按学号,按姓名,输入完成后删除相应的学生,然后把所有学生信息显示出来。如图5所示。
图5 删除通讯录记录功能
显示通讯录信息:输入5,进入该功能,把所有学生信息显示出来。如图6所示。
退出管理系统:输入0,退出该程序。
图6 显示通讯录信息功能
3 要求
该程序要基于控制台开发,不是windows窗体应用程序。
需要使用面向对象的思想编写此程序,比如需要用到类的概念,至少包含一个学生类。
程序的界面可以和上述截图有所不同,但功能不能改变。
开发完成后,写出相关文档,描述整个开发过程,该文档主要考察对所开发程序的理解程度,同时,此文档会作为成绩的重要依据。文档中只需要写出开发设计过程,相当于讲一下这个程序每个功能是如何实现的,不要列举相关的概念及名词解释、心得体会等与本程序无关的内容,文档字数不少于700字(以Word中统计字数为准),文档中不得粘贴代码,也不能插入代码截图,可以用语言描述出代码的含义,文档中可以插入程序运行图,或者自己画的流程图之类的图表。
若发现文档和其他同学有较多雷同的地方,按作弊处理。
文档格式要求:正文部分:宋体,小四号,行距1.5倍,首行缩进2字符;标题:黑体,小三号,行距1.5倍。页眉设置为学号姓名。文档中不要出现大量的空行。
提交时,把文档放到程序文件夹中,然后进行压缩,最后把压缩包命名为学号姓名,如201901024101张三。
4:项目git地址
转载:https://blog.csdn.net/qq_38215042/article/details/110848032