Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
D'2-ka
12 / 12 / 3
Регистрация: 12.03.2012
Сообщений: 120
1

Вывести в отсортированном виде список вводимых студентов

13.05.2012, 21:57. Просмотров 1401. Ответов 23
Метки нет (Все метки)

Доброе время суток!
Помогите разобраться в работе с классами
С начало происходит ввод данных студентов (в данном коде 2 студента). После окончания :
//1) надо вывести колво вводимых студентов(в данном коде 2 студента, хотел в самом начале сделать пункт где надо вводить колво вводимых студентов но не смог, в принципе не обязательно).
2)Главное нужно в конце вывести в отсортированном виде список вводимых студентов (сперва ФИО после Дата рож.)
Никак не получается вывести этот список. Помогите с кодом программы

Благодарю за помощь!


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication12
{
    class worker
    {
 
        public static int kolvo = 0;
        public static int god = 0;
        public static int den = 0;
        public static int mesyac = 0;
        public static int u4eba = 0;
        public static string nacionalnost;
        public static string name;
        public static string pol;
        worker()
        {
 
            Console.Write("ФИО Студента:");
 
            //for (int i = 0; i < 10; i++)
 
            {
                name = Console.ReadLine();
 
            }
 
            while (true)
            {
                Console.Write("Введите Год рождения (между 1990-1995):");
                god = Convert.ToInt16(Console.ReadLine());
                if (god >= 1996) Console.WriteLine("***** Введенная дата не подходит критериям");
                else
                    if (god <= 1899) Console.WriteLine("***** Введенная дата не подходит критериям");
                    else
                        break;
            }
 
            while (true)
            {
                Console.Write("Введите Месяц рождения (**):");
                mesyac = Convert.ToInt16(Console.ReadLine());
                if (mesyac >= 13) Console.WriteLine("***** Введенная дата не подходит критериям");
                else break;
            }
 
            while (true)
            {
                Console.Write("Введите День рождения (**):");
                den = Convert.ToInt16(Console.ReadLine());
                if (den >= 32) Console.WriteLine("***** Введенная дата не подходит критериям");
                else break;
            }
 
            while (true)
            {
                Console.Write("Введите пол (<..М..> или <..Ж..>):");
                pol = Convert.ToString(Console.ReadLine());
                if (pol == "М")
                {
                    pol = "Мужской";
                    break;
                }
 
 
                if (pol == "Ж")
                {
                    pol = "Женскии";
                    break;
                }
 
                else if ((pol != "М") || (pol != "Ж"))
                {
                    Console.WriteLine("***** <..М..> или <..Ж..>");
                }
            }
 
            while (true)
            {
                Console.Write("Введите национальность:");
                nacionalnost = Convert.ToString(Console.ReadLine());
                break;
            }
 
 
            while (true)
            {
                Console.Write("Год поступления  (между 1996-2011):");
                u4eba = Convert.ToInt16(Console.ReadLine());
                if (u4eba >= 2012) Console.WriteLine("***** Введенная дата не подходит критериям");
                else
                    if (u4eba <= 1995) Console.WriteLine("***** Введенная дата не подходит критериям");
                    else
                        break;
            }
 
 
 
 
 
 
            Console.WriteLine("___________________________________________________________________");
            Console.WriteLine("ФИО студента: {0}\t     Дата рождения: {3}.{2}.{1}", worker.name, worker.god, worker.mesyac, worker.den);
            Console.WriteLine("Пол: {0}     Национальность: {1}     Год поступления : {2}", worker.pol, worker.nacionalnost, worker.u4eba);
            Console.WriteLine("___________________________________________________________________");
            Console.WriteLine();
            Console.WriteLine();
 
        }
 
        public static worker[] wrk1;
        static void Main(string[] args)
        {
 
            wrk1 = new worker[2];
            for (int i = 0; i < 2; i++)
                wrk1[i] = new worker();
 
            {
                Console.WriteLine();
            }
 
/////////////////////////// здесь и начинаются проблемы  
 
            for (int i = 0; i < 2; i++)
                Console.WriteLine("Колво введенных студентов:{0}", name[i]);
            Console.WriteLine("Студент           Дата рождения ");
 
            for (int i = 0; i < 2; i++)
                Console.WriteLine("{0}     {1}.{2}.{3}", worker.name, worker.god, worker.mesyac, worker.den);
 
 
            Console.ReadLine();
        }}
    }



ну хоть кто нибудь помогите )
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 21:57
Ответы с готовыми решениями:

Вывести список студентов в порядке убывания
Добрый вечер. Ребята, помогите отсортировать считанный список. В файл нужно...

Вывести список неуспевающих студентов в порядке убывания количества пропущенных ими занятий
Сама задача: Группе студентов в результате полусеместровой аттестации были...

Вычислить общий средний балл всех студентов и распечатать список студентов со средним баллом выше общего
Задача следующая: вычислить общий средний балл всех студентов и распечатать...

Работа с структурами. Вывести список студентов, имеющих по итогам аттестации только "2"
typedef struct {char name; int group, mark;} STUD; STUD kurs; /информация о...

LINQ запрос: вывести имена студентов (без повторов) и количество студентов с таким именем
Помогите составить следующий LINQ запрос Вывести имена студентов (без повторов)...

23
D'2-ka
12 / 12 / 3
Регистрация: 12.03.2012
Сообщений: 120
15.05.2012, 00:06  [ТС] 21
понимаю , но я хотел бы просто разобраться где я допускал ошибки...
0
Дмитрий3241
643 / 513 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
15.05.2012, 00:49 22
Вот класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
 
class Рабочий
{
    string фамилия = string.Empty;
    string имя = string.Empty;
    string отчество = string.Empty;
    int? год_рождения = null;
    int? год_поступления = null;
    string национальность = string.Empty;
 
    public string Фамилия
    {
        get { return фамилия; }
        set { фамилия = value; }
    }
 
    public string Имя
    {
        get { return имя; }
        set { имя = value; }
    }
 
    public string Отчество
    {
        get { return отчество; }
        set { отчество = value; }
    }
 
    public int Год_рождения
    {
        get { return (int)год_рождения; }
        set
        {
            if ( value >= 1990 && value <= 1995 )
                год_рождения = value;
            else
                throw new IndexOutOfRangeException( "Год рождения не соответствовал условию." );
        }
    }
 
    public int Год_поступления
    {
        get { return (int)год_поступления; }
        set
        {
            if ( value >= 1996 && value <= 2011 )
                год_поступления = value;
            else
                throw new IndexOutOfRangeException( "Год поступления не соответствовал условию." );
        }
    }
 
    public string Национальность
    {
        get { return национальность; }
        set { национальность = value; }
    }
 
    public Рабочий()
    {
    }
 
    public Рабочий( string Фамилия, string Имя, string Отчество, int Год_рождения, int Год_поступления, string Национальность )
    {
        this.фамилия = Фамилия;
        this.имя = Имя;
        this.отчество = Отчество;
 
        if ( Convert.ToInt16( Год_рождения ) >= 1990 && Convert.ToInt16( Год_рождения ) <= 1995 )
            this.год_рождения = Год_рождения;
        else
            throw new IndexOutOfRangeException( "Год рождения не соответствовал условию." );
 
        if ( Convert.ToInt16( Год_поступления ) >= 1996 && Convert.ToInt16( Год_поступления ) <= 2011 )
            this.год_поступления = Год_поступления;
        else
            throw new IndexOutOfRangeException( "Год поступления не соответствовал условию." );
 
        this.национальность = Национальность;
    }
}
Ну и вот код для проверки класса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main( string[] args )
        {
            Console.Write( "Введите ко-во рабочих которых хотите зарегистрировать: " );
            int size = int.Parse( Console.ReadLine() );
 
            Рабочий[] guys = new Рабочий[size];
 
            for ( int i = 0; i < guys.Length; i++ )
            {
                Console.WriteLine( "Введите через пробел Фамилию, Имя, Отчество, Год рождения,\nГод поступления, Национальность: " );
                string[] param = Console.ReadLine().Split( ' ' );
                guys[i] = new Рабочий( param[0], param[1], param[2], int.Parse( param[3] ), int.Parse( param[4] ), param[5] );
                if ( i == size - 1 )
                    Console.WriteLine( "Ввод окончен." );
            }
 
            Console.WriteLine( "Хотите вывести список рабочих?" );
            Console.WriteLine( "1. Да" );
            Console.WriteLine( "2. Нет" );
            string ans = Console.ReadLine();
 
            if ( ans == "1" )
            {
                foreach ( Рабочий r in guys )
                    Console.WriteLine( "Фамилия: {0}, Имя: {1}, Отчество: {2}\nГод рождения: {3}, Год поступления: {4}\nНациональность: {5}",
                        r.Фамилия, r.Имя, r.Отчество, r.Год_рождения, r.Год_поступления, r.Национальность );
            }
 
            Console.ReadKey();
        }
    }
}

Не по теме:

У меня уже не осталось времени посмотреть ваш код, но завтра гляну и скажу где ошибки.

1
D'2-ka
12 / 12 / 3
Регистрация: 12.03.2012
Сообщений: 120
15.05.2012, 00:54  [ТС] 23
Большое спасибо !
0
Евгений В
876 / 645 / 130
Регистрация: 01.03.2010
Сообщений: 1,213
15.05.2012, 13:30 24
D'2-ka,
Вот твой сокращенный вариант. Все работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
 
namespace ConsoleApplication1
{
        class worker
        {
 
            int god = 0;
             string name;
 
            worker()
            {
 
                Console.Write("ФИО Студента:");
                name = Console.ReadLine();
 
                Console.Write("Введите Год рождения (между 1990-1995):");
                god = Convert.ToInt16(Console.ReadLine());
            }
 
           // ПРОЦЕДУРА СОРТИРОВКИ
           // Принимает на вход массив и возвращает тоже массив
            public static worker[] Sort (worker[] mass)
            {
                // массив, который будем заполнять с учетом сортировки.
                worker[] sortMass = new worker[mass.Length];
 
               SortedList sl = new SortedList();
 
               for (int i = 0; i < mass.Length; i++)
                {
                    sl.Add(mass[i].name, Convert.ToString(i)); // запоминаем в списке sl как: имя и номер ячейки в массиве mass, где это имя хранится
                }
 
               ICollection c = sl.Keys;
               // Далее идея такова: В каждой строке sl будет храниться name и номер ячейки массива, где этот name хранится.
                //  Строки будут выводиться с учетом сортировки по name. Там же и номер ячейки в  mass
               //номер этой ячейки Convert.ToUInt16(sl[str])
                int n = 0;
                foreach (string str in c)
               {
                   sortMass[n] = mass[Convert.ToUInt16(sl[str])]; 
                   n++;
               }
                  return sortMass;
           }
 
 
            static void Main(string[] args)
            {
                Console.Write("Введите количество студентов - ");
                int countSt = Convert.ToInt32(Console.ReadLine());
 
                worker[] wrk1 = new worker[countSt];
 
                // заполнение списка
                for (int i = 0; i < wrk1.Length; i++)
                {
                    wrk1[i] = new worker();
                }
 
                // вывод списка до сортировки по имени
                for (int i = 0; i < wrk1.Length; i++)
                    Console.WriteLine("{0}     {1}", wrk1[i].name, wrk1[i].god);
 
                // создаем дополнительный массив, аналогичный wrk1 но хранящий сортированные данные по имени
                worker[] wrk1Sort = new worker[countSt];
                wrk1Sort = Sort(wrk1);
 
                // вывод списка после сортировки по имени
                Console.WriteLine("отсортированный список");
                for (int i = 0; i < wrk1Sort.Length; i++)
                    Console.WriteLine("{0}     {1}", wrk1Sort[i].name, wrk1Sort[i].god);
            }
        }
   }
И еще, убери static в полях типа public static int kolvo = 0 и т.д.
Иначе, после ввода, у тебя во всех элементах массива будут одинаковые, введенные последними данные.
И name не должно совпадать. Иначе при сортировке в процедуре Sort выскочит ошибка.

P.S. Если ты учишься на программиста, то в оформлении программы должен пойти путем как у Дмитрий3241.
Так легче оформлять логику решения, исключать (ловить) ошибки, модифицировать и т.д.
Если программа будет большая то, со временем, ты "утонешь" в ней или вернувшись к ней через 2-3 года сам не поймешь, чего тут наворотил и как ее модифицировать.
1
15.05.2012, 13:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2012, 13:30

Список студентов
Создайте базу данных студентов. На форме - поля для ввода информации о студенте...

Вывести значения вводимых исходных данных
Вывести значения вводимых исходных данных и полученные результаты, сопровождая...

Упорядочить список студентов
Имеется список студентов: упорядочить их фамилии по алфавитному порядку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru