结构体数组的增删改查

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace 项目
{
    internal class Program
    {
        public struct Student
        {
            public string no; //学号
            public string name; //姓名
            public int age; //年龄
            public string sex; //性别
            public string tel; //电话
            public string address; //住址
        }
 
        public static Student[] stu = new Student[100];//声明一个全局结构数组
        public static int num;//声明一个全局数量(当前人数)
        private static void Main(string[] args)
        {
            Console.WriteLine("请输入要录入学员的个数:");
             num = Convert.ToInt32(Console.ReadLine());
            LuRu(num);
            //Console.WriteLine("请输入要查找的学员姓名:");
            //string name = Console.ReadLine();
            //Seach(num, name);
           // Insert(ref num);
            Del(ref num);
            Console.ReadKey();
        }
 
        /// <summary>
        /// 录入学员信息
        /// </summary>
        /// <param name="count"></param>
        private static void LuRu(int count)
        {
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine("请输入第{0}个学员的学号:", i + 1);
                stu[i].no = Console.ReadLine();
                Console.WriteLine("请输入第{0}个学员的姓名:", i + 1);
                stu[i].name = Console.ReadLine();
                Console.WriteLine("请输入第{0}个学员的年龄:", i + 1);
                stu[i].age = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入第{0}个学员的性别:", i + 1);
                stu[i].sex = Console.ReadLine();
                Console.WriteLine("请输入第{0}个学员的电话:", i + 1);
                stu[i].tel = Console.ReadLine();
                Console.WriteLine("请输入第{0}个学员的住址:", i + 1);
                stu[i].address = Console.ReadLine();
            }
            Console.WriteLine("你录入的学员信息如下:");
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine("你录入的第{0}个学员的学号是{1}:", i + 1, stu[i].no);
                Console.WriteLine("你录入的第{0}个学员的姓名是{1}:", i + 1, stu[i].name);
                Console.WriteLine("你录入的第{0}个学员的年龄是{1}:", i + 1, stu[i].age);
                Console.WriteLine("你录入的第{0}个学员的性别是{1}:", i + 1, stu[i].sex);
                Console.WriteLine("你录入的第{0}个学员的电话是{1}:", i + 1, stu[i].tel);
                Console.WriteLine("你录入的第{0}个学员的住址是{1}:", i + 1, stu[i].address);
            }
        }
 
        /// <summary>
        /// 按姓名查询是否有该学员
        /// </summary>
        /// <param name="count"></param>
        /// <param name="name"></param>
        private static void Seach(int count, string name)
        {
            bool flag = false;
            for (int i = 0; i < count; i++)
            {
                if (stu[i].name == name)
                {
                    Console.WriteLine("学员的学号是{0}", stu[i].no);
                    Console.WriteLine("学员的姓名是{0}", stu[i].name);
                    Console.WriteLine("学员的年龄是{0}", stu[i].age);
                    Console.WriteLine("学员的性别是{0}", stu[i].sex);
                    Console.WriteLine("学员的电话是{0}", stu[i].tel);
                    Console.WriteLine("学员的住址是{0}", stu[i].address);
                    flag = true;
                }
            }
            if (flag == false)
            {
                Console.WriteLine("没有查到该学员!");
            }
        }
        /// <summary>
        /// 添加学员
        /// </summary>
        /// <param name="count"></param>
        private static void Insert(ref int count)
        {
            
            for (int i = count; i < count+1; i++)//这里的条件要在之前总人数的基础上在加1
            {
                Console.WriteLine("请输入要插入的学员学号:");
                stu[i].no = Console.ReadLine();
                Console.WriteLine("请输入要插入的学员姓名:");
                stu[i].name = Console.ReadLine();
                Console.WriteLine("请输入要插入的学员年龄:");
                stu[i].age = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入要插入的学员性别:");
                stu[i].sex = Console.ReadLine();
                Console.WriteLine("请输入要插入的学员电话:");
                stu[i].tel = Console.ReadLine();
                Console.WriteLine("请输入要插入的学员住址:");
                stu[i].address = Console.ReadLine();
            }
            Console.WriteLine("添加学员成功!");
            count++;//添加成功够,将总人数加1,因为这里用的是引用传递,所以总人数的个数也发生改变
            Console.WriteLine("你录入的学员信息如下:");
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine("你录入的第{0}个学员的学号是{1}:", i + 1, stu[i].no);
                Console.WriteLine("你录入的第{0}个学员的姓名是{1}:", i + 1, stu[i].name);
                Console.WriteLine("你录入的第{0}个学员的年龄是{1}:", i + 1, stu[i].age);
                Console.WriteLine("你录入的第{0}个学员的性别是{1}:", i + 1, stu[i].sex);
                Console.WriteLine("你录入的第{0}个学员的电话是{1}:", i + 1, stu[i].tel);
                Console.WriteLine("你录入的第{0}个学员的住址是{1}:", i + 1, stu[i].address);
            }
           
        }
        /// <summary>
        /// 查询到有此姓名的同学,修改其电话
        /// </summary>
        /// <param name="count"></param>
        /// <param name="name"></param>
        /// <param name="tel"></param>
        private static void Update(int count, string name, string tel)
        {
            for (int i = 0; i < count; i++)
            {
                if (stu[i].name == name)
                {
                    stu[i].tel = tel;
                }
            }
        }
        /// <summary>
        /// 删除学员
        /// </summary>
        /// <param name="count"></param>
        private static void Del(ref int count)
        {
            string str = string.Empty;
            do
            {
                Console.WriteLine("请输入要删除的姓名:");
                string name = Console.ReadLine();
                for (int i = 0; i < count; i++)
                {
                    if (stu[i].name == name)
                    {
                        count--;//将总人数减1
                        for (int j = i; j < count; j++)
                        {
                            stu[j].no = stu[j + 1].no;//找到当前要删除的数据的下标,然后将后面下标的值覆盖当前要删除的数据,就相当删除了
                            stu[j].name = stu[j + 1].name;
                            stu[j].age = stu[j + 1].age;
                            stu[j].sex = stu[j + 1].sex;
                            stu[j].tel = stu[j + 1].tel;
                            stu[j].address = stu[j + 1].address;
                        }
                    }
                }
                Console.WriteLine("成功删除一个学员信息!");
                Console.WriteLine("现在的学员信息如下:");
                for (int i = 0; i < count; i++)
                {
                    Console.WriteLine("你录入的第{0}个学员的学号是{1}:", i + 1, stu[i].no);
                    Console.WriteLine("你录入的第{0}个学员的姓名是{1}:", i + 1, stu[i].name);
                    Console.WriteLine("你录入的第{0}个学员的年龄是{1}:", i + 1, stu[i].age);
                    Console.WriteLine("你录入的第{0}个学员的性别是{1}:", i + 1, stu[i].sex);
                    Console.WriteLine("你录入的第{0}个学员的电话是{1}:", i + 1, stu[i].tel);
                    Console.WriteLine("你录入的第{0}个学员的住址是{1}:", i + 1, stu[i].address);
                }
                if (count == 1)//如果只有一条数据的时候,提示不能在进行删除了,并且退出本循环
                {
                    Console.WriteLine("只剩下一条了,不能在删除了!");
                    break;
                }
                Console.WriteLine("是否要继续删除(y/n)?");
                str = Console.ReadLine();
            } while (str!="n");
        }
    }
} 总结:录入的时候,只要给定要录入的个数,循环动态录入,跟数组动态接收值是一个道理。 查找的时候,知道总人数,然后挨个遍历查找,如果查找到,输出,如果没有,则提示没有查找到(这里定义一个开关,如果查找到了,将开关开启,如果没有,则不开,然后在循环遍历完成以后,判断开关是开启还是闭合,如果是闭合,说明没有查找到相应数据)  插入数据,是将当前总人数+1,然后从当前总人数的下标位开始,继续往下添加 ,添加完成之后,记得把总人数进行修改,所以这里需要引用传递。 删除时先要查到到是否有当前的数据,如果有,将当前总人数先-1,然后将当前要删除的数据的下标的后一个下标的数据覆盖当前的数据的下标,就完成了删除,记住,这里也需要引用传递,只要这样,总人数才发生了改变! 
posted @ 2015-01-22 11:28  Bodyjiang  阅读(2169)  评论(0编辑  收藏  举报