Week 13 (Full)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Week 13 (Full)

Bài gửi by haidang001 on 12/05/11, 10:53 pm

(NHắn hỏi: ae đi sinh hoạt công dân vui vẻ không?;)) )
Final struggle.
Bài cuối cùng, tạm thời chia tay với series Cintro.
Nhằm tạo hình ảnh tốt với sinh viên, thầy chia tay ae với số lượng bài bất ngờ.

Số lượng: 2 bài(s).

Phần 1: Đề bài.

Bài 1: student(Quản lý sinh viên)
Code:

    Write a student management program using this structure:
          typedef struct
          {
        char id[6];
        char name[31];
        float grade;
        char classment;
        }
        student;

    Students are classified according to their grade in respect to this criteria:
        - from 9 to 10: A (Excellent)
        - from 8 to 9: B (Good)
        - from 6.5 to 8: C (Medium)
        - < 6.5: D (Bad)

Bài 2: exam (giả lập thi trắc nghiệm)
Code:

    Multi choice Exam program

    Your mission is to develop a multiple choice exam program. The design of a question is as follow:
        - Question: text data contain question.
        - Ans1: First answer.
        - Ans2: Second answer.
        - Ans3: Third answer.
        - Corr: int - correct ans.

    You create an exam of 5 questions and take 5 candidates to do the exam.

    Print out the result of each person in increasing order. Number of correct answer each person has made.

Phần 2: Hint (gợi ý)
Do đã học khá đầy đủ cấu trúc dữ liệu cũng như cú pháp C. Thế nên bài lần này yêu cầu khá khắt khe về việc trình bày cũng như chắc năng chương trình.

Bài 1: student (quản lý sv)
1. Bài làm cần đủ ít nhất 4 thao tác: thêm, xóa, sửa, và . . .thoát So good.
2. Phần xóa + sửa, chú ý khi số lượng sv == 0.
3. Thống nhất về cấu trúc bài làm, nếu không sẽ gặp trục trặc khi hỏi người dùng sv cần được xóa hay sửa.

Bài 2: exam(thi trắc nghiệm)
Hình thức: Bài làm để dạng menu, viết cho đẹp để cuối kì kiếm điểm cao cao.
Nội dung: No tip So good

Phần 3: code
Những bài đề ngắn, tip ngắn, thì code lại trâu. Do là final struggle, Koltec code khá cẩn thận (bài student).

vẫn lại lưu ý cũ: Koltec の code hoàn toàn mang tính chất tham khảo, chưa dám chắc đúng hết. Có gì ae góp ý hộ.

Trên trang web http://www.haidang001.tk, có đầy đủ code từ week1. Ae lên tham khảo.

Bài 1: student (quản lý sv)
Code:


/*Copyright (c) haidang001 (tm) (@yahoo.com)*/
/*S_have fun! :)*/

/*    Write a student management program using this structure:
    typedef struct
    {
    char id[6];
    char name[31];
    float grade;
    char classment;
    }
    student;

    Students are classified according to their grade in respect to this criteria:
    - from 9 to 10: A (Excellent)
    - from 8 to 9: B (Good)
    - from 6.5 to 8: C (Medium)
    - < 6.5: D (Bad)*/

#include <stdio.h>
#define nselect 9
#define nmax 1000
const char pname[100] = "Student manager v1.0";
typedef struct
{
  char id[100], name[50], class; //note: maxsize of id is 7
  int nid;
  double grade;
} student_t;

void menu(), rmenu(), add(student_t[], int*), cp(char[], char[], int, int), show(student_t[], int), delete(student_t[], int*), reset(int*), edit(student_t[], int), query(student_t[], int), about(), clquery(student_t[], int);
char select(), vquit();
int check(char[]), classcount(student_t[], int, char);

main()
{
  char quit = 'N', s;
  student_t a[nmax + 1];
  int n = 0;
 
  do
    {
      menu();
      s = select();
      switch (s)
    {
    case '1':
      add(a, &n);
      rmenu();
      break;

    case '2':
      delete(a, &n);
      rmenu();
      break;

    case '3':
      edit(a, n);
      rmenu();
      break;

    case '4':
      show(a, n);
      rmenu();
      break;

    case '5':
      query(a, n);
      rmenu();
      break;

    case '6':
      clquery(a, n);
      rmenu();
      break;

    case '7':
      reset(&n);
      rmenu();
      break;

    case '8':
      about();
      rmenu();
      break;

    case '9':
      quit = vquit();
      break;
    };
    }
  while (quit != 'Y');

  printf("\nS_have fun! :)\n");
  return 0;
}

void clquery(student_t a[], int n)
{
  int i, nfound = 0;
  char ans[100], t;
 
  printf("Enter classment to query: ");
  gets(ans);
  t = toupper(ans[0]);
 
  printf("------------------------------------------------------------------\n");
  printf("|%-4s|%-4s|%-30s|%-8s|%-5s|%-9s|\n", "ORD", "ORD*", "Name", "ID", "Grade", "Classment");
  printf("------------------------------------------------------------------\n");
  for(i = 1; i <= n; i++)
    if (a[i].class == t)
      printf("|%-4d|%-4d|%-30s|%-8s|%-5.2lf|%-9c|\n", ++nfound, i, a[i].name, a[i].id, a[i].grade, a[i].class);
  printf("------------------------------------------------------------------\n");
  printf("Note: ORD*- order in main list\n\n");

  return;
}

void about()
{
  printf("\t%s\n", pname);
  printf("Was created by haidang001 (tm) (@yahoo.com)\n");
 
  printf("\nAuthor 's information:\n");
  printf("\t%-10s: %s\n", "Name", "koltec (koltec haidang)");
  printf("\t%-10s: %s\n", "Email", "tranvansangk41@gmail.com");
  printf("\t%-10s: %s\n", "Yahoo", "haidang001");
  printf("\t%-10s: %s\n", "Skype", "haidang001");
  printf("\t%-10s: %s\n ", "Phone", "(+84) 982 802 454");
  printf("\t%-10s: %s\n", "Facebook", "http://www.facebook.com/haidang001");
  printf("\t%-10s: %s\n", "Website", "http://www.haidang001.tk");
  printf("\t\nS_have fun! :)\n");
 
  return;
}

void query(student_t a[], int n)
{
  int t, i, nfound = 0;
 
  printf("Enter student 's ID to query: ");
  scanf("%d", &t);
  getchar();
 
  printf("------------------------------------------------------------------\n");
  printf("|%-4s|%-4s|%-30s|%-8s|%-5s|%-9s|\n", "ORD", "ORD*", "Name", "ID", "Grade", "Classment");
  printf("------------------------------------------------------------------\n");
  for(i = 1; i <= n; i++)
    if (a[i].nid == t)
      printf("|%-4d|%-4d|%-30s|%-8s|%-5.2lf|%-9c|\n", ++nfound, i, a[i].name, a[i].id, a[i].grade, a[i].class);
  printf("------------------------------------------------------------------\n");
  printf("Note: ORD*- order in main list\n\n");

  return;
}

void edit(student_t a[], int n)
{
  if (n == 0)
    {
      printf("Database is empty!\n");
      return;
    };
 
  int t;
  char ans[100];
  double temp;
 
  do
    {
      printf("Enter student number to edit: ");
      scanf("%d", &t);
      getchar();
    } while ((t < 1) || (t > n));
 
  printf("\nEnter new details:\n");
  printf("\tName (%s): ", a[t].name);
  gets(a[t].name);
 
  do
    {
      printf("\tID (%s): ", a[t].id);
      gets(ans);
    } while (check(ans) != 1);
  cp(a[t].id, ans, 1, 8);
  a[t].nid = atoi(a[t].id);

  do
    {
      printf("\tGrade (%-.2lf): ", a[t].grade);
      scanf("%lf", &temp);
      getchar();
    } while ((temp < 0) || (temp > 10));
  a[t].grade = temp;

  if (temp >= 9)
    a[t].class = 'A';
  else
    if (temp >= 8)
      a[t].class = 'B';
    else
      if (temp >= 6.5)
    a[t].class = 'C';
      else
    a[t].class = 'D'; 


void reset(int *n)
{
  char ans[100];
  do
    {
      printf("Are you realy want to delete all records?(Y/N)");
      gets(ans);
      ans[0] = toupper(ans[0]);
    } while ((ans[0] != 'Y') && (ans[0] != 'N'));
  if (ans[0] == 'Y')
    *n = 0;
  return;
}

void delete(student_t a[], int *n)
{
  if (*n == 0)
    {
      printf("Database is empty!\n");
      return;
    };
 
  int i, t;
  char ans[100];
 
  do
    {
      printf("Enter student number to delete: ");
      scanf("%d", &t);
      getchar();
    } while ((t < 1) || (t > *n));
 
  printf("\nStudent 's information:\n");
  printf("\t%-20s: %d\n", "Order in main list", t);
  printf("\t%-20s: %s\n", "Name", a[t].name);
  printf("\t%-20s: %s\n", "ID", a[t].id);
  printf("\t%-20s: %-5.2lf\n", "Grade", a[t].grade);
  printf("\t%-20s: %c\n\n", "Classment", a[t].class);

  do
    {
      printf("Are you sure to delete this student from database? (Y/N)");
      gets(ans);
      ans[0] = toupper(ans[0]);
    } while ((ans[0] != 'Y') && (ans[0] != 'N'));
  if (ans[0] == 'Y')
    {
      for(i = t; i < *n; i++)
    a[i] = a[i + 1];
      (*n) --;
    };
  return;
}

void show(student_t a[], int n)
{
  int i;
  char c;
 
  printf("--------------------------------------------------------------\n");
  printf("|%-4s|%-30s|%-8s|%-5s|%-9s|\n", "ORD", "Name", "ID", "Grade", "Classment");
  printf("--------------------------------------------------------------\n");
  for(i = 1; i <= n; i++)
    printf("|%-4d|%-30s|%-8s|%-5.2lf|%-9c|\n", i, a[i].name, a[i].id, a[i].grade, a[i].class);
  printf("--------------------------------------------------------------\n\n");

  printf("--------------------\n");
  printf("|%-10s|%-7s|\n", "Classment", "Number");
  printf("--------------------\n"); 
  for(c = 'A'; c <= 'D'; c++)
    printf("|%-10c|%-7d|\n", c, classcount(a, n, c));
  printf("--------------------\n\n");
 
  return;
}

int classcount(student_t a[], int n, char c)
{
  int res = 0, i;
  for(i = 1; i <= n; i++)
    if (a[i].class == c)
      res++;
  return res;
}

void add(student_t a[], int *n)
{
  char ans[1000];
  double temp;
 
  (*n)++;
  printf("Enter new student 's name: ");
  gets(a[*n].name);
  do
    {
      printf("Enter student 's id 's number (8 digits): ");
      gets(ans);
    } while (check(ans) != 1);
  cp(a[*n].id, ans, 1, 8);
  a[*n].nid = atoi(a[*n].id);

  do
    {
      printf("Enter new student 's grade (0 -> 10): ");
      scanf("%lf", &temp);
      getchar();
    } while ((temp < 0) || (temp > 10));
  a[*n].grade = temp;

  if (temp >= 9)
    a[*n].class = 'A';
  else
    if (temp >= 8)
      a[*n].class = 'B';
    else
      if (temp >= 6.5)
    a[*n].class = 'C';
      else
    a[*n].class = 'D';
  return;
}

int check(char a[])
{
  char *x = a;
  int i;
  for(i = 1; i <= 8; i++)
    {
      if ((*x < '0') || (*x > '9'))
    return 0;
      x++;
    };
  if (*x != '\0')
    return 0;
  else
    return 1;
}

void cp(char a[], char b[], int st, int n)
{
  char *i = a, *j = b;
  int t;
  for(t = 1; t < st; t++)
    j++;
  for(t = 1; t <= n; t++)
    *i++ = *j++;
  *i = '\0';
  return;
}

void menu()
{
  printf("\t\t  %s\n", pname);
  printf("\tCopyrigt (c) haidang001 (tm) (@yahoo.com)\n");
  printf("\t\t    S_have fun! :)\n\n");

  printf("\t1. Add new student\n");
  printf("\t2. Delete a student record\n");
  printf("\t3. Edit student information\n");
  printf("\t4. Show details\n");
  printf("\t5. Query by student 's id\n");
  printf("\t6. Query by classment\n");
  printf("\t7. Reset list\n");
  printf("\t8. About\n");
  printf("\t9. Quit\n\n");
  return;
}

char select()
{
  char ans[100];

  do
    {
      printf("Enter your selection: ");
      gets(ans);
    }
  while ((ans[0] < '1') || (ans[0] - '0' > nselect));
  printf("\n");
 
  return ans[0];
}

char vquit()
{
  char ans[100];

  do
    {
      printf("Do you really want to exit? (Y/N)");
      gets(ans);
      ans[0] = toupper(ans[0]);
    }
  while ((ans[0] != 'Y') && (ans[0] != 'N'));
 
  return ans[0];
}

void rmenu()
{
  char ans[100];
  printf("\nPress Enter to return to main menu . . .");
  gets(ans);
  return;
}

//S_have fun! :)

Bài 2: exam (thi trắc nghiệm)
Code:

/*Copyright (c) haidang001 (tm) (@yahoo.com)*/
/*S_have fun! :)*/

/*    Multi choice Exam program

    Your mission is to develop a multiple choice exam program. The design of a question is as follow:
    - Question: text data contain question.
    - Ans1: First answer.
    - Ans2: Second answer.
    - Ans3: Third answer.
    - Corr: int - correct ans.

    You create an exam of 5 questions and take 5 candidates to do the exam.

    Print out the result of each person in increasing order. Number of correct answer each person has made.*/

#include <stdio.h>

#define nselect 4
#define nques 5
#define nchoice 3
#define ncandidate 5

typedef struct
{
  char question[1000], ans[nchoice + 1][1000];
  int correct;
} ques_t;
typedef struct
{
  int id, res;
} cand_t;

void menu(), rmenu(), init(ques_t[], cand_t[]), take(ques_t[], cand_t[]), view(cand_t[]);
char select(), vquit();

main()
{
  char quit = 'N', s;
  cand_t a[ncandidate + 1];
  ques_t ques[nques + 1];
 

  init(ques, a);
  do
    {
      menu();
      s = select();
      switch (s)
    {
    case '1':
      take(ques, a);
      rmenu();
      break;

    case '2':
      view(a);
      rmenu();
      break;

    case '3':
      init(ques, a);
      rmenu();
      break;

    case '4':
      quit = vquit();
      break;
    };
    }
  while (quit != 'Y');

  printf("\nS_have fun! :)\n");
  return 0;
}

void view(cand_t a[])
{
  int i, j;
  cand_t temp;

  for(i = 1; i <= ncandidate; i++)
    for(j = i + 1; j <= ncandidate; j++)
      if (a[i].res > a[j].res)
    {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
    };
 
  printf("Number each candidate in incresing order:\n");
  for(i = 1; i <= ncandidate; i++)
    printf("\t%d: Candidate number %2d with %d point(s)\n", i, a[i].id, a[i].res);
 
  return;
}

void take(ques_t ques[], cand_t a[])
{
  int i, j, t, k;
  for(i = 1; i <= ncandidate; i++)
    {
      printf("Candidate number %d 's phase:\n", i);
      for(j = 1; j <= nques; j++)
    {
      printf("\tQuestion number %d:\n", j);
      for(k = 1; k <= nchoice; k++)
        printf("\t\tAnswer %d: %s\n", k, ques[j].ans[k]);
     
      do
        {
          printf("\tEnter your answer: ");         
          scanf("%d", &k);
          getchar();
        } while ((k <= 0) || (k > nchoice));

      if (k == ques[j].correct)
        a[i].res++;
      printf("\n");
    };
      printf("\n");
    };

  return;
}

void init(ques_t ques[], cand_t a[])
{
  int i, j;
  for(i = 1; i <= ncandidate; i++)
    {
      a[i].res = 0;
      a[i].id = i;
    };
  for(i = 1; i <= nques; i ++)
    {
      printf("Enter question number %2d: ", i);
      gets(ques[i].question);
      for(j = 1; j <= nchoice; j++)
    {
      printf("\tAnswer number %2d: ", j);
      gets(ques[i].ans[j]);
    };
      do
    {
      printf("Enter correct answer number: ");
      scanf("%d", &ques[i].correct);
      getchar();
    }
      while ((ques[i].correct <= 0) || (ques[i].correct > nchoice));
      printf("\n");
    };
 
  return;
}

void menu()
{
  printf("\t    Multi choice Exam stimulator v1.0\n");
  printf("\tCopyrigt (c) haidang001 (tm) (@yahoo.com)\n");
  printf("\t\t    S_have fun! :)\n\n");

  printf("\t1. Take exam\n");
  printf("\t2. View statistic\n");
  printf("\t3. Reenter question\n");
  printf("\t4. Quit\n\n");
  return;
}

char select()
{
  char ans[100];

  do
    {
      printf("Enter your selection: ");
      gets(ans);
    }
  while ((ans[0] < '1') || (ans[0] - '0' > nselect));
  printf("\n");
 
  return ans[0];
}

char vquit()
{
  char ans[100];

  do
    {
      printf("Do you really want to exit? (Y/N)");
      gets(ans);
      ans[0] = toupper(ans[0]);
    }
  while ((ans[0] != 'Y') && (ans[0] != 'N'));
 
  return ans[0];
}

void rmenu()
{
  char ans[100];
  printf("\nPress Enter to return to main menu . . .");
  gets(ans);
  return;
}

//S_have fun! :)

Thắc mắc nhiệt tình. S_have fun! So good

_________________
koltec.
Email : tranvansangk41@gmail.com.

Y!M : haidang001.
Skype : haidang001.
Website : haidang001.tk or trầnvănsáng.vn

Facebook : facebook.com/haidang001[/size]

SĐT: 0942 666 890 (or 0982 802 454).


Thu đi để lại lá vàng
Anh đi để lại cho nàng thằng く
Mùa thu nối tiếp mùa thu.
Thằng くnối tiếp thằng くra đời.


S_have fun!

haidang001

Tổng số bài gửi : 91
Points : 176
Join date : 25/09/2010
Age : 24

Xem lý lịch thành viên http://haidang001.tk

Về Đầu Trang Go down

Re: Week 13 (Full)

Bài gửi by asakurayo on 13/05/11, 12:13 am

sáng chăm thế,thầy mới cho bài lúc sáng mà!

asakurayo

Tổng số bài gửi : 38
Points : 62
Join date : 27/12/2010
Age : 24
Đến từ : hai duong

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Week 13 (Full)

Bài gửi by asakurayo on 13/05/11, 12:15 am

trâu です hihi:)

asakurayo

Tổng số bài gửi : 38
Points : 62
Join date : 27/12/2010
Age : 24
Đến từ : hai duong

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Week 13 (Full)

Bài gửi by Sponsored content Today at 03:10 pm


Sponsored content


Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết