С = З + П = 2200 + 1100 3300 руб. (6.4)
Эта сумма без налога на добавленную стоимость (НДС). Планируется ее получить от продажи 100 программных продуктов. Анализ рынка говорит, что реализовать такое количество не составит особых проблем. Исходя из этого, посчитаем цену одного программного комплекса без учета НДС
Ц = С / 5 = 3300 / 100 = 33 руб.(6.5)
Теперь посчитаем окончательную цену одного программного продукта с учетом НДС 18%.
НДС = ((З + П) / 100) * 0.18 = 33 * 0.18 6 руб.(6.6)
С учетом НДС цена программного продукта составляет:
Цпп = Ц + НДС 40 руб.(6.7)
Процентное соотношение себестоимости, прибыли и налогов для ста комплектов продукта представлены на рисунке 2.
Рисунок 6.2. Процентное соотношение себестоимости, прибыли и налогов для 100 комплектов продукта
На рисунке 6.2 показана динамика роста прибыли от продажи программного продукта относительно числа экземпляров.
Рисунок 6.3. Динамика роста прибыли от продажи ПП
6.5 Экономическая целесообразность разработки
При разработке программного продукта значительное внимание уделяется экономическому обоснованию необходимости проведения данного комплекса работ по его созданию.
Стоимость конечного продукта для потребителя не высока всего 40 руб. Разработка данного программного продукта ведется для образовательных учреждений. Поэтому цена одного лицензионного диска очень важна. Чем ниже цена, тем больше вероятность, что программный продукт купят. При цене всего 40 рублей, диски с программой быстро купят. Покупателями станут преподаватели вузов и учителя других коммерческих учебных заведений. При продаже 100 лицензионных дисков, разработка программы не просто окупится, а принесет прибыль в размере 1100 рублей. Если при продаже всех лицензионных дисков с программой, на рынке все еще будет спрос, то при дополнительном выпуске лицензионных копий, при минимальных затратах, мы получим еще какой-то процент прибыли.
В итоге можно сделать вывод, что разработка данного программного продукта целесообразна.
Код формы с лекциями
namespace Kursach
{public enum Modes { Lecture, ChooseLecture }
public partial class LecturesForm : Form
{
private ChoiseButtons buttons;
private DirectoryInfo[] lecturesDirectories;
private DirectoryInfo currentLectureDirectory;
private Point startPosition = new Point(5, 15);
private Size buttonSize = new Size(200, 30);
private int distance = 5;
private Modes currentMode;
public LecturesForm(string folderPath)
InitializeComponent();
buttons = new ChoiseButtons(ButtonTypes.RadioButton, startPosition.X, startPosition.Y, buttonSize.Width, buttonSize.Height, distance);
DirectoryInfo directory = new DirectoryInfo(folderPath);
lecturesDirectories = directory.GetDirectories();
foreach (DirectoryInfo lectureDirectory in lecturesDirectories)
groupBoxLectures.Controls.Add(buttons.AddNextButton(lectureDirectory.Name));
}
SetChooseLectureMode();
private void button1_Click(object sender, EventArgs e)
if (currentMode == Modes.ChooseLecture)
List<int> selected = buttons.GetSelected();
if (selected.Count == 0)
return;
else
currentLectureDirectory = lecturesDirectories[selected[0]];
try
FileStream fileStream = new FileStream(currentLectureDirectory.FullName + "\\lecture", FileMode.Open);
StreamReader streamReader = new StreamReader(fileStream);
richTextBoxLecture.Text = streamReader.ReadToEnd();
streamReader.Close();
fileStream.Close();
catch
SetLecturesMode();
InitForm form = new InitForm();
if (form.ShowDialog() == DialogResult.OK)
new TestForm(currentLectureDirectory.FullName, currentLectureDirectory.Name, form.UserName, this).Show();
private void SetLecturesMode()
currentMode = Modes.Lecture;
richTextBoxLecture.Visible = true;
linkLabelResults.Visible = false;
groupBoxLectures.Visible = false;
richTextBoxLecture.Dock = DockStyle.Fill;
linkLabelBack.Visible = true;
this.MaximumSize = new Size();
this.MinimumSize = new Size();
this.Size = new Size(739, 419);
this.MaximizeBox = true;
this.Text = currentLectureDirectory.Name;
buttonChoose.Select();
private void SetChooseLectureMode()
currentMode = Modes.ChooseLecture;
linkLabelResults.Visible = true;
richTextBoxLecture.Visible = false;
groupBoxLectures.Visible = true;
linkLabelBack.Visible = false;
this.MaximumSize = new Size(739, 419);
this.MinimumSize = new Size(739, 419);
this.MaximizeBox = false;
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
private void LecturesForm_VisibleChanged(object sender, EventArgs e)
if (Visible == true)
private void linkLabel1_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
new ResultsForm().ShowDialog();
private void panel2_Paint(object sender, PaintEventArgs e)
public partial class TestForm : Form
private Test test;
private string userName;
private List<int> correctAnswers = new List<int>();
private Form parentForm;
public TestForm(string path, string testName, string userName, Form formToClose)
parentForm = formToClose;
formToClose.Hide();
this.userName = userName;
test = new Test(testName, path);
catch (Exception)
test.BeginTest();
Question question = test.CurrentQuestion;
InitQuestionWindow(question);
questionsGroupBox.Select();
private void InitQuestionWindow(Question question)
ButtonTypes type = (question.CorrectAnswers.Count != 1) ? ButtonTypes.CheckboxButton : ButtonTypes.RadioButton;
buttons.Reset(type);
questionsGroupBox.Controls.Clear();
this.Text = question.QuestonName;
this.textBoxTest.Text = question.QuestonText;
for (int i = 0; i < question.Answers.Count; i++)
buttons.AddNextButton(question.Answers[i + 1]);
questionsGroupBox.Controls.Add(buttons[i]);
public static void ShowCriticalErrorMessage(string message)
Environment.Exit(1);
private static void ShowInfoMessage(string info, string message)
ShowMessage(message, info, MessageBoxButtons.OK, MessageBoxIcon.Information);
private static void ShowErrorMessage(string info, string message)
ShowMessage(message, info, MessageBoxButtons.OK, MessageBoxIcon.Error);
private static void ShowMessage(string info, string message, MessageBoxButtons buttons, MessageBoxIcon icon)
MessageBox.Show(message, info, buttons, icon);
private void buttonNextQuestion_Click(object sender, EventArgs e)
bool isCorrect = false;
if (selected.Count == test.CurrentQuestion.CorrectAnswers.Count)
isCorrect = true;
foreach (int correctQuestionNumber in test.CurrentQuestion.CorrectAnswers)
if (!selected.Contains(correctQuestionNumber - 1))
isCorrect = false;
if (isCorrect) correctAnswers.Add(test.CurrentQuestion.QuestionNumber);
if (!test.IsTestEnded)
InitQuestionWindow(test.GoToNextQuestion());
EndTest();
private void EndTest()
FileStream testFileStream = new FileStream("data\\results.txt", FileMode.Append);
StreamWriter testStreamWriter = new StreamWriter(testFileStream);
testStreamWriter.Close();
testFileStream.Close();
if (userDecision == System.Windows.Forms.DialogResult.Yes)
parentForm.Show();
this.Close();
Environment.Exit(0);
questionsGroupBox.Visible = false;
buttonNextQuestion.Visible = false;
textBoxTest.Visible = false;
private void TestForm_FormClosing(object sender, FormClosingEventArgs e)
if (parentForm.Visible == false)
parentForm.Close();
private void TestForm_Load(object sender, EventArgs e)
public partial class ResultsForm : Form
public ResultsForm()
FileStream fileStream = new FileStream("data\\results.txt", FileMode.Open);
textBox1.Text = streamReader.ReadToEnd();
this.Select();
textBox1.Text = "Никто не проходил тесты";
private void textBox1_TextChanged(object sender, EventArgs e)
public partial class InitForm : Form
public InitForm()
public string UserName
get { return textBoxName.Text + " " + textBoxSurname.Text; }
private void buttonBeginTest_Click(object sender, EventArgs e)
DialogResult = System.Windows.Forms.DialogResult.OK;
private void InitForm_Load(object sender, EventArgs e)
Страницы: 1, 2, 3, 4