数结构实验
实验六
数结构综合性实验
计算机科学技术系X班
组 长:X
日 期:2011年X月X日
实验报告
2009级 X班 2011年X月X日
实验类型:综合设计型 实验点:软件实验室三
组长: 组员:
实验题目
选票统计系统
二 需求分析
定数量参赛选手进行投票求输入投票者姓名址记录十投票投票结束查新轮选手排名查前十名选手分情况票数情况
三 概设计
退出
查新轮排行榜信息选手名次分票数
显示投票结果确认信息
输入姓名址选手编号
投票
四 详细设计
1投票
int vote()
{
int ijmnp
char a
char num3[3]
printf(\n\n\n\t\t投票\n\n)
T ticket初始化选票
printf(\t\t\t请输入您姓名)
scanf(sticketname)
printf(\t\t\t请输入您家庭住址)
scanf(sticketadress)
for(i1i<10i++){
ticketlist[i]order2i
strcpy(ticketlist[i]num200)
}
for(){
printf(\t请次序分输入选手编号(01~40)十#键结束\n)
printf(\t注意次输入必须空格隔开输入完毕回车键\n)
for(j1j<10j++){
scanf(snum3)
if(strcmp(num3#)0)
break
strcpy(ticketlist[j]num2num3)
}
system(cls)
printf(\n\n\n\t\t\t您选票\n)
for(m1m<10m++)&&strcmp(ticketlist[m]num200)0
printf(\t\t\t第2d名s\nticketlist[m]order2ticketlist[m]num2)
printf(\t\t\t确定(yn)确定更改\n)
aagetch()
if(a'y'||a'Y')
break
else{
if(a'n'||a'N'){
system(cls)
continue
}
else{
printf(\t\t\t输入误请重试\n)
goto a
}
}
}
2009100145
2排行榜
void list()
{
int ijrtmaxmark[10]
int nksm1
T *head*p*q
printf(\n\n\n\t\t新排行榜\n\n)
char f[2]{0}初始化
char b[9][2]{123456789}
for(i0i<4i++)
{
char e[4][2]{1234}
char c[4][2]{0123}
char a[4][2]{0123}
for(j0j<8j++)
{
waiters[m]mark waiters[m]order1waiters[m]Total_Ticket0
strcpy(waiters[m]num1strcat(a[i]b[j]))
strcpy(a[i]c[i])
m++
}
waiters[m]mark waiters[m]order1waiters[m]Total_Ticket0
strcpy(waiters[m]num1strcat(e[i]f))
m++
}
for(int z1z<40z++)
waiters[z]statu0
2009100122
3排序
int temptemp1求出十值
for(t0t<10t++){
int max0
for(r1r<40r++){
if(waiters[r]statu1)
continue
if(max
tempr
}
}
waiters[temp]statu1
maxmark[t]temp
}
2009100122
4检查值中没等值
for(int x0x<9x++){
for(int yx+1y<10y++)
{分数相较票数
if(waiters[maxmark[x]]markwaiters[maxmark[y]]mark)
{前面票数面票数交换位置
if(waiters[maxmark[x]]Total_Ticket
maxmark[x]maxmark[y]
maxmark[y]temp
}
}
}
}
2009100132
5文件中选票信息导入链表中
ifstream infile
infileopen(sourcetxtiosin|iosnocreate)
if(infile){
printf(\t\t\t文件开失败\n)
exit(1)
}
head(T *)malloc(sizeof(T))
head>nextNULL
phead
while(infile){
q(T *)malloc(sizeof(T))
infileread((char *)qsizeof(T))
p>nextq
q>nextNULL
pq
}
phead
while(p>nextNULL)
{
for(k1k<10&&strcmp(p>list[k]num200)0k++){
for(s1s<40s++){
if(strcmp(p>list[k]num2waiters[s]num1)0){
waiters[s]Total_Ticket++
switch(p>list[k]order2){
case 1{waiters[s]mark+15
break}
case 2{waiters[s]mark+12
break}
case 3{waiters[s]mark+9
break}
case 4{waiters[s]mark+7
break}
case 5{waiters[s]mark+6
break}
case 6{waiters[s]mark+5
break}
case 7{waiters[s]mark+4
break}
case 8{waiters[s]mark+3
break}
case 9{waiters[s]mark+2
break}
case 10{waiters[s]mark+1
break}
}
}
}
}
pp>next
}
2009100136
6废票处理
for(n1n<10&&strcmp(ticketlist[n]num200)0n++){
if(ticketlist[n]num2[0]>51*4*||ticketlist[n]num2[0]<48*0*){
printf(\n\n\t\t\t编号越界次投票效\n)
return 0
}
for(pn+1p<10&&strcmp(ticketlist[n]num200)0p++){
if(strcmp(ticketlist[n]num2ticketlist[p]num2)0){
printf(\n\n\t\t\t编号出现重复次投票效\n)
return 0
}
}
}
2009100145
7符合求选票写进文件中
ofstream outfile
outfileopen(sourcetxtiosout|iosapp)
if(outfile){
printf(文件开失败\n)
exit(1)
}
outfilewrite((char *)&ticketsizeof(T))
outfileclose()
printf(\n\n\t\t\t投票成功感谢您参\n)
return 0
}
2009100136
8函数
void main()
{
char choice
char mark
for(){
menu()
for(){
choicegetch()
if(choice<49||choice>51)
printf(\t\t\t输入误请重试\n)
else break
}
switch(choice){
case '1'{
system(cls)
vote()
break}
case '2'{
system(cls)
list()
break}
case '3'{
exit(1)
break}
}
printf(\t\t\t返回菜单请E号键\n)
for(){
markgetch()
if(mark'e'||mark'E'){
system(cls)
break
}
else
printf(\t\t\t输入误请重试\n)
}
}
2009100132
五 调试分析
运行程中输入正确导致调试出错时应反复调试应运行前计算运行时需数量避免失误
六 说明
选手投票时候应注意操作规范性十名选手投票统计新轮选手排名情况选手票数
七 测试结果
八 实验总结
1实验前应充分做准备数需参数提前列举出减少实验程中时间
2调试分析时应注意实验步骤步骤进行漏应程
3注意调试运行容进行合理排版运行时候条理容易找步运行指令
九 模块分工
2009100145 辛志鹏 投票废票处理
2009100136 张发辉 文件中选票信息导入链表中
符合求选票写进文件中
2009100122 赵金桃 排行榜排序
2009100132 田 飞 函数检查值中没等值
附完整代码:
#include stdioh
#include conioh
#include stringh
#include fstreamh
#include stdlibh
#define N 4140名员工编号00~39
数结构
typedef struct Waiter
{
char num1[3]选手编号
int order1选手排名
int mark总分
int Total_Ticket总票数
int statu
struct Waiter *next1
}W
W waiters[N]
typedef struct List
{
int order2名次
char num2[3]选手编号
}L
typedef struct Ticket
{
char name[10]姓名
char adress[30]址
L list[11]投
struct Ticket *next
}T
菜单
void menu()
{
printf(\n\n\n\t欢迎投票统计系统\n)
printf(\t|\t\t\t 1投 票 \t\t\t|\n)
printf(\t|\t\t\t 2排行榜 \t\t\t|\n)
printf(\t|\t\t\t 3退 出 \t\t\t|\n)
printf(\t\n)
printf(\t\t\t请选择相应功(1~3)\n)
}
投票
int vote()
{
int ijmnp
char a
char num3[3]
printf(\n\n\n\t\t投票\n\n)
T ticket初始化选票
printf(\t\t\t请输入您姓名)
scanf(sticketname)
printf(\t\t\t请输入您家庭住址)
scanf(sticketadress)
for(i1i<10i++){
ticketlist[i]order2i
strcpy(ticketlist[i]num200)
}
for(){
printf(\t请次序分输入选手编号(01~40)十#键结束\n)
printf(\t注意次输入必须空格隔开输入完毕回车键\n)
for(j1j<10j++){
scanf(snum3)
if(strcmp(num3#)0)
break
strcpy(ticketlist[j]num2num3)
}
system(cls)
printf(\n\n\n\t\t\t您选票\n)
for(m1m<10m++)&&strcmp(ticketlist[m]num200)0
printf(\t\t\t第2d名s\nticketlist[m]order2ticketlist[m]num2)
printf(\t\t\t确定(yn)确定更改\n)
aagetch()
if(a'y'||a'Y')
break
else{
if(a'n'||a'N'){
system(cls)
continue
}
else{
printf(\t\t\t输入误请重试\n)
goto a
}
}
}
废票处理
for(n1n<10&&strcmp(ticketlist[n]num200)0n++){
if(ticketlist[n]num2[0]>51*4*||ticketlist[n]num2[0]<48*0*){
printf(\n\n\t\t\t编号越界次投票效\n)
return 0
}
for(pn+1p<10&&strcmp(ticketlist[n]num200)0p++){
if(strcmp(ticketlist[n]num2ticketlist[p]num2)0){
printf(\n\n\t\t\t编号出现重复次投票效\n)
return 0
}
}
}
符合求选票写进文件中
ofstream outfile
outfileopen(sourcetxtiosout|iosapp)
if(outfile){
printf(文件开失败\n)
exit(1)
}
outfilewrite((char *)&ticketsizeof(T))
outfileclose()
printf(\n\n\t\t\t投票成功感谢您参\n)
return 0
}
排行榜
void list()
{
int ijrtmaxmark[10]
int nksm1
T *head*p*q
printf(\n\n\n\t\t新排行榜\n\n)
char f[2]{0}初始化
char b[9][2]{123456789}
for(i0i<4i++)
{
char e[4][2]{1234}
char c[4][2]{0123}
char a[4][2]{0123}
for(j0j<8j++)
{
waiters[m]mark waiters[m]order1waiters[m]Total_Ticket0
strcpy(waiters[m]num1strcat(a[i]b[j]))
strcpy(a[i]c[i])
m++
}
waiters[m]mark waiters[m]order1waiters[m]Total_Ticket0
strcpy(waiters[m]num1strcat(e[i]f))
m++
}
for(int z1z<40z++)
waiters[z]statu0
文件中选票信息导入链表中
ifstream infile
infileopen(sourcetxtiosin|iosnocreate)
if(infile){
printf(\t\t\t文件开失败\n)
exit(1)
}
head(T *)malloc(sizeof(T))
head>nextNULL
phead
while(infile){
q(T *)malloc(sizeof(T))
infileread((char *)qsizeof(T))
p>nextq
q>nextNULL
pq
}
phead
while(p>nextNULL)
{
for(k1k<10&&strcmp(p>list[k]num200)0k++){
for(s1s<40s++){
if(strcmp(p>list[k]num2waiters[s]num1)0){
waiters[s]Total_Ticket++
switch(p>list[k]order2){
case 1{waiters[s]mark+15
break}
case 2{waiters[s]mark+12
break}
case 3{waiters[s]mark+9
break}
case 4{waiters[s]mark+7
break}
case 5{waiters[s]mark+6
break}
case 6{waiters[s]mark+5
break}
case 7{waiters[s]mark+4
break}
case 8{waiters[s]mark+3
break}
case 9{waiters[s]mark+2
break}
case 10{waiters[s]mark+1
break}
}
}
}
}
pp>next
}
排序
int temptemp1求出十值
for(t0t<10t++){
int max0
for(r1r<40r++){
if(waiters[r]statu1)
continue
if(max
tempr
}
}
waiters[temp]statu1
maxmark[t]temp
}
检查值中没等值
for(int x0x<9x++){
for(int yx+1y<10y++)
{分数相较票数
if(waiters[maxmark[x]]markwaiters[maxmark[y]]mark)
{前面票数面票数交换位置
if(waiters[maxmark[x]]Total_Ticket
maxmark[x]maxmark[y]
maxmark[y]temp
}
}
}
}
输出前十名
printf(\t\t|\t名次 选手编号 合计分 合计票数\t|\n)
for(int o0o<10o++)
printf(\t\t|\t 2d s 2d 2d\t|\no+1
waiters[maxmark[o]]num1
waiters[maxmark[o]]mark
waiters[maxmark[o]]Total_Ticket)
printf(\t\t\n)
printf(\n)
}
函数
void main()
{
char choice
char mark
for(){
menu()
for(){
choicegetch()
if(choice<49||choice>51)
printf(\t\t\t输入误请重试\n)
else break
}
switch(choice){
case '1'{
system(cls)
vote()
break}
case '2'{
system(cls)
list()
break}
case '3'{
exit(1)
break}
}
printf(\t\t\t返回菜单请E号键\n)
for(){
markgetch()
if(mark'e'||mark'E'){
system(cls)
break
}
else
printf(\t\t\t输入误请重试\n)
}
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档